初めまして。
ゲームを作りたくC言語の勉強をさせて頂いております。
入門に関してはコードを書きまくったり本等で勉強し理解したつもりなのですが、
当方文系頭な為、数学に関しては全くの無知です。
それ故色々と勉強になり、大変感謝しています。
然し、不安というのは憑き物でして、プログラムに関して数学はやはり重要な位置を占めるという事実に多少困惑しています。
ゲームプログラミングでは「余り」が重要であるとか、物理、数式等、殆ど知識がないのですが、どこから勉強すればいいのか迷ってしまいます。応用も利きません(たぶんですが・・)。
数学的知識は、プログラミングを続けるに従い、身につくものなのでしょうか?
或いは、オススメの書籍、問題等ありましたらご教授下さい。
(「プログラマの数学」は一通り読みました)
それでは、失礼致します。
C言語と数学
Re:C言語と数学
初めまして。
今どの位の数学の知識をお持ちでしょうか?
また、どの程度まで数学が必要になるようなプログラミングをされるのでしょうか?
それによって回答もかなり変わってくると思います。
物理演算や、物理現象のシミュレーションを行うとか、3Dモデルをガンガン使っていくような
プログラムを組まれる場合はそれなりの専門的な知識が豊富に必要だと思いますが、
単に趣味で普通のプログラム、例えば何らかの簡単な計算をするツールであったり、
簡単なエディタを作ってみたり、2DのFFのようなゲームを作ってみたりという程度であれば
大げさな話、小学校の算数がわかれば充分だと思います。
それでも、これからの色々な可能性を考えて、何でも勉強していきたいと言う事でしたら、
プログラミングに関係ありそうな数学の分野を勉強していくといいと思います。
恐らく大学で習う範囲の数学で必要なのは(一般的に)線形代数だけだと思いますから、
とりあえず高校の教科書で勉強すれば充分ですよ。
YHさんが今どの程度の数学の知識をお持ちかわからないので、
どこから勉強すればいいという回答が出来ませんが、
さしあたり、三角関数などはいろいろと役に立ちます。
円周率が、ラジアンで180度を表すことや、
sin,cosの使い方などがあやふやでしたらその辺を勉強されたらいいと思います。
シューティングゲームではこの辺をバリバリ使います。
1秒間に何十万回とこの計算をしていると思います。
>ゲームプログラミングでは「余り」が重要であるとか
とお書きになっていますが、「余り」の計算の仕方はOKということでいいでしょうか?
7÷4は1あまり3ですね。つまり余りは1
9÷4は2あまり1ですね。つまり余りは2。
何故余りが重要なのかというと、よく増加するカウンタをループで使えるからです。
・・・といってもわかりにくいでしょうから、例を出します。
2Dのマップをテクテク歩いている画像をそうぞうして下さい。
止まってる画像→
右足を出している画像→
止まっている画像→
左足を出している画像→・・・
これを何度も繰り返してやれば歩いているように見えそうですね。
この画像番号を上から0,1,2,3としてやります。
0,1,2,3という番号を繰り返し
0→1→2→3→0→1→2→3→0→1→2→3→
とループさせる事が出来ればこの処理がうまくいきそうです。
ではどうしたらこのループが表現できるでしょうか。
今、これとは別に、無限に増加しているカウンタがあったとします。
0→1→2→3→4→5→ ... →1000→
のような感じです。
これを使ってループを表現出来ないかと考えると、このカウンタをxとすると、
x%4
つまり4で割った余りで計算出来そうです。
0を4で割ったあまりは 0
1を4で割ったあまりは 1
2を4で割ったあまりは 2
3を4で割ったあまりは 3
4を4で割ったあまりは 0
5を4で割ったあまりは 1
6を4で割ったあまりは 2
7を4で割ったあまりは 3
8を4で割ったあまりは 0
9を4で割ったあまりは 1
右側の実際に計算したあまりは0から3でループしていますね。
こうしてカウンタを用いて画像番号をループさせる事が出来ました。
このように、割った余りという考え方は非常に便利なんですね。
・・ちと説明が長くなりすぎました。
もう「そんなこととうに知ってる!」ということでしたらごめんなさい。
>不安というのは憑き物でして
確かに付いて・・いや憑いてまわりますねw
いや冗談です。
>数学的知識は、プログラミングを続けるに従い、身につくものなのでしょうか?
自然に身に付くものじゃないのでやはり勉強しないと身に付かないでしょうね。
「必要な時に勉強するスタイル」を続ける事で、
自然に数学がみについていくという考え方であればそのとおりではあると思いますが、
やはりいつかは勉強しないとそれは身に付かないと思います。
私はアルゴリズム系の本を買って一通り勉強はしてみたものの、
やはり「必要な時に勉強するスタイル」というのが私は好きです。
私も一通り、基本的な知識はみにつけなければ、とそれ系の本を端から
よんでみた時、そこに「ベジェ曲線」
http://ja.wikipedia.org/wiki/%E3%83%99% ... 2%E7%B7%9A
なるものが書いてありましたが、その当時は「なんのこっちゃ」って感じで
読んだだけでした。
こういうのは読んだだけではどうにも理解しにくいですよね。
しかしシューティングを作るようになってからこの計算方法がすごく素晴らしいことがわかり、この計算式を勉強しました。
興味持って、「習得しよう!」と思って勉強したので身に付きも速かったと思います。
逆に言えば興味も特に無い分野の計算式見ても、身に付きが遅いように思います。
きっと使える使えないが別として「知っている」ということは非常に大事でしょうから、
色んな本を読んでみる事は大事だと思います。
知っていたら、使えなくとも「あぁ、あれを使えばよさそうだな」と思えますしね。
ただ、一通りそれが済んだら色々と自分の興味のあるソフトを作りながら勉強していくのが良いと思いますよ。
・ ・・って長くなりすぎましたね。
肝心な本の紹介は何も出来ていませんがこのへんで^^;
今どの位の数学の知識をお持ちでしょうか?
また、どの程度まで数学が必要になるようなプログラミングをされるのでしょうか?
それによって回答もかなり変わってくると思います。
物理演算や、物理現象のシミュレーションを行うとか、3Dモデルをガンガン使っていくような
プログラムを組まれる場合はそれなりの専門的な知識が豊富に必要だと思いますが、
単に趣味で普通のプログラム、例えば何らかの簡単な計算をするツールであったり、
簡単なエディタを作ってみたり、2DのFFのようなゲームを作ってみたりという程度であれば
大げさな話、小学校の算数がわかれば充分だと思います。
それでも、これからの色々な可能性を考えて、何でも勉強していきたいと言う事でしたら、
プログラミングに関係ありそうな数学の分野を勉強していくといいと思います。
恐らく大学で習う範囲の数学で必要なのは(一般的に)線形代数だけだと思いますから、
とりあえず高校の教科書で勉強すれば充分ですよ。
YHさんが今どの程度の数学の知識をお持ちかわからないので、
どこから勉強すればいいという回答が出来ませんが、
さしあたり、三角関数などはいろいろと役に立ちます。
円周率が、ラジアンで180度を表すことや、
sin,cosの使い方などがあやふやでしたらその辺を勉強されたらいいと思います。
シューティングゲームではこの辺をバリバリ使います。
1秒間に何十万回とこの計算をしていると思います。
>ゲームプログラミングでは「余り」が重要であるとか
とお書きになっていますが、「余り」の計算の仕方はOKということでいいでしょうか?
7÷4は1あまり3ですね。つまり余りは1
9÷4は2あまり1ですね。つまり余りは2。
何故余りが重要なのかというと、よく増加するカウンタをループで使えるからです。
・・・といってもわかりにくいでしょうから、例を出します。
2Dのマップをテクテク歩いている画像をそうぞうして下さい。
止まってる画像→
右足を出している画像→
止まっている画像→
左足を出している画像→・・・
これを何度も繰り返してやれば歩いているように見えそうですね。
この画像番号を上から0,1,2,3としてやります。
0,1,2,3という番号を繰り返し
0→1→2→3→0→1→2→3→0→1→2→3→
とループさせる事が出来ればこの処理がうまくいきそうです。
ではどうしたらこのループが表現できるでしょうか。
今、これとは別に、無限に増加しているカウンタがあったとします。
0→1→2→3→4→5→ ... →1000→
のような感じです。
これを使ってループを表現出来ないかと考えると、このカウンタをxとすると、
x%4
つまり4で割った余りで計算出来そうです。
0を4で割ったあまりは 0
1を4で割ったあまりは 1
2を4で割ったあまりは 2
3を4で割ったあまりは 3
4を4で割ったあまりは 0
5を4で割ったあまりは 1
6を4で割ったあまりは 2
7を4で割ったあまりは 3
8を4で割ったあまりは 0
9を4で割ったあまりは 1
右側の実際に計算したあまりは0から3でループしていますね。
こうしてカウンタを用いて画像番号をループさせる事が出来ました。
このように、割った余りという考え方は非常に便利なんですね。
・・ちと説明が長くなりすぎました。
もう「そんなこととうに知ってる!」ということでしたらごめんなさい。
>不安というのは憑き物でして
確かに付いて・・いや憑いてまわりますねw
いや冗談です。
>数学的知識は、プログラミングを続けるに従い、身につくものなのでしょうか?
自然に身に付くものじゃないのでやはり勉強しないと身に付かないでしょうね。
「必要な時に勉強するスタイル」を続ける事で、
自然に数学がみについていくという考え方であればそのとおりではあると思いますが、
やはりいつかは勉強しないとそれは身に付かないと思います。
私はアルゴリズム系の本を買って一通り勉強はしてみたものの、
やはり「必要な時に勉強するスタイル」というのが私は好きです。
私も一通り、基本的な知識はみにつけなければ、とそれ系の本を端から
よんでみた時、そこに「ベジェ曲線」
http://ja.wikipedia.org/wiki/%E3%83%99% ... 2%E7%B7%9A
なるものが書いてありましたが、その当時は「なんのこっちゃ」って感じで
読んだだけでした。
こういうのは読んだだけではどうにも理解しにくいですよね。
しかしシューティングを作るようになってからこの計算方法がすごく素晴らしいことがわかり、この計算式を勉強しました。
興味持って、「習得しよう!」と思って勉強したので身に付きも速かったと思います。
逆に言えば興味も特に無い分野の計算式見ても、身に付きが遅いように思います。
きっと使える使えないが別として「知っている」ということは非常に大事でしょうから、
色んな本を読んでみる事は大事だと思います。
知っていたら、使えなくとも「あぁ、あれを使えばよさそうだな」と思えますしね。
ただ、一通りそれが済んだら色々と自分の興味のあるソフトを作りながら勉強していくのが良いと思いますよ。
・ ・・って長くなりすぎましたね。
肝心な本の紹介は何も出来ていませんがこのへんで^^;
Re:C言語と数学
勉強をしたければ興味のある分野を自分が理解できるところからすれば良いでしょう。
プログラミングと同じく、数学の勉強もそれ自体が楽しいことです(個人差がありますが)。
何かの役に立つとは限りませんが、有意義な時間を過ごせるでしょう。
一方、人生は有限です。比較的近くに何らかの形の納期があるかもしれません。
数学というのも道具ですので、理解しないでもとりあえずは使うことができます。
C言語の標準関数についても、正しい使い方さえできれば初心者には十分で、
標準関数の実装を知るよりも先にすべきことがごまんとあります。
数学についても、計算方法と有効範囲だけどこかから仕入れてきてプログラムを作れます。
計算方法の正しさについては、とりあえず仕入れ元を信頼してしまいましょう。
有効範囲についての前提がちょっと変わるだけで、計算方法が役に立たなくなることも
よくありますが、自分で理解していない場合は応用が利きません。
理解しない場合、自分と同じ前提の計算方法を調べたり(見つからないかも)、
掲示板で聞いたり(度が過ぎると迷惑がられる)する必要があります。
自分の作るプログラムで良く使う分野から手を付けるのも良いのではないでしょうか。
興味があれば吸収も早いし、勉強の成果もすぐに発揮できます。
何も一冊単位で勉強する必要もないですよ。
数学全般に自信がなく、数学力の底上げ図りたいという動機の場合、
社会人に対してはあまりお勧めできる方法を知りません。
プログラマに直接役に立ちそうな数学というと、高校の数学程度だと思いますが、
高校のときにできなかった(or やらなかった)からこそ自信がないのに、
そのとき以上の熱意で勉強ができる人は少ないのではないかと。
今、どの程度の必要性を感じているかにもよりますけどね。
やはり興味や必要性のある分野から各個撃破し、慣れてきたら
それ以外の分野に手を出す、ですかね。
最後に、数学で大事なのは教科書を一応理解することよりも、
問題が解けることだと思います。教科書は大体分かりやすいように書いてあるので、
読んだら何となく分かったような気になります。でも、だからといって
教科書の問題を解けるとは限りません。難問でなくても良いので、
自分の力で問題を解いてみましょう。
プログラミングも同じで、入門書を読んだら何となく分かったような気になりますが、
それと、自分で考えてプログラムを作るというのは違います。
もしかして、プログラムを作れない言い訳を数学に求めていませんか?
数学を必要としないプログラムならば自由に作れますか?
もしも心当たりがあるようでしたら、たまに立ち止まって、
自分に何が必要かを考えるのも有意義ではないでしょうか。
プログラミングと同じく、数学の勉強もそれ自体が楽しいことです(個人差がありますが)。
何かの役に立つとは限りませんが、有意義な時間を過ごせるでしょう。
一方、人生は有限です。比較的近くに何らかの形の納期があるかもしれません。
数学というのも道具ですので、理解しないでもとりあえずは使うことができます。
C言語の標準関数についても、正しい使い方さえできれば初心者には十分で、
標準関数の実装を知るよりも先にすべきことがごまんとあります。
数学についても、計算方法と有効範囲だけどこかから仕入れてきてプログラムを作れます。
計算方法の正しさについては、とりあえず仕入れ元を信頼してしまいましょう。
有効範囲についての前提がちょっと変わるだけで、計算方法が役に立たなくなることも
よくありますが、自分で理解していない場合は応用が利きません。
理解しない場合、自分と同じ前提の計算方法を調べたり(見つからないかも)、
掲示板で聞いたり(度が過ぎると迷惑がられる)する必要があります。
自分の作るプログラムで良く使う分野から手を付けるのも良いのではないでしょうか。
興味があれば吸収も早いし、勉強の成果もすぐに発揮できます。
何も一冊単位で勉強する必要もないですよ。
数学全般に自信がなく、数学力の底上げ図りたいという動機の場合、
社会人に対してはあまりお勧めできる方法を知りません。
プログラマに直接役に立ちそうな数学というと、高校の数学程度だと思いますが、
高校のときにできなかった(or やらなかった)からこそ自信がないのに、
そのとき以上の熱意で勉強ができる人は少ないのではないかと。
今、どの程度の必要性を感じているかにもよりますけどね。
やはり興味や必要性のある分野から各個撃破し、慣れてきたら
それ以外の分野に手を出す、ですかね。
最後に、数学で大事なのは教科書を一応理解することよりも、
問題が解けることだと思います。教科書は大体分かりやすいように書いてあるので、
読んだら何となく分かったような気になります。でも、だからといって
教科書の問題を解けるとは限りません。難問でなくても良いので、
自分の力で問題を解いてみましょう。
プログラミングも同じで、入門書を読んだら何となく分かったような気になりますが、
それと、自分で考えてプログラムを作るというのは違います。
もしかして、プログラムを作れない言い訳を数学に求めていませんか?
数学を必要としないプログラムならば自由に作れますか?
もしも心当たりがあるようでしたら、たまに立ち止まって、
自分に何が必要かを考えるのも有意義ではないでしょうか。