トップページ > 過去ログ > 記事閲覧
計算式の意味
名前:紙袋 日時: 2012/01/15 22:46

どうもこんにちは。 DXライブラリについてではないのですが(前に質問した時もそうだったような・・・) この掲示板の ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2295 のスレッドの中で管理人さんの書いたプログラムを見て 何をしているかは大体は理解出来るのですが sin,cosテーブルの作成の際のAngleを求める計算式や、 円の中心までの距離を算出している式がなぜこのような式になるのか分かりません。 公式でこういうものがあるのですか?もしあるならどのような式なのか教えていただけないでしょうか? あと、もしよかったらでいいのですが このような数式を勉強するのにいい教材やサイト等があったら教えてください。 よろしくお願いします。

Page: 1 |

Re: 計算式の意味 ( No.1 )
名前:獅子 日時:2012/01/16 14:30

>なぜこのような式になるのか分かりません 具体的でないので憶測ですがsinやcosを使った数式をそもそも知らない、ということでしょうか *回転や変形の演算に参考になります  ttp://i-libro.net/wpmu/blog/archives/618 *sin、cosが分からないならこちら  ttp://dixq.net/g/h_06.html *math.h(数学的演算関係の関数が書いてありますのでこれらを検索するのもいいかもしれません  ttp://hooktail.org/computer/index.php?C%B8%C0%B8%EC%A4%CE%BF%F4%B3%D8%B4%D8%BF%F4 とりあえず三角関数の基礎から勉強する、というのはどうでしょうか? (もうそんなの理解してる!とかだったらすいません…
Re: 計算式の意味 ( No.2 )
名前:紙袋 日時:2012/01/16 14:49

解答の方ありがとうございます。 ちょっと言いたいことが分かりにくかったかもしれません。 何が言いたかったというと例えばURL先の管理人さんが書いてある // 内側の盛り上がっているように見せる箇所で使用する Cos テーブルを作成する Angle = 0.0f ; for( i = 0 ; i < CIRCLE_RADIUS_VERTEX_NUM ; i ++, Angle += ( PHI_F / 2.0f ) / ( CIRCLE_RADIUS_VERTEX_NUM - 1 ) ) { InCircleCosTable[ i ] = ( float )cos( ( double )Angle ) ; } の部分の Angle += ( PHI_F / 2.0f ) / ( CIRCLE_RADIUS_VERTEX_NUM - 1 ) で、 円周率/2.0/(半径の頂点数-1) のような式だったり for( j = 0 ; j < CIRCLE_RADIUS_VERTEX_NUM ; j ++, Vert ++ ) { // 円の中心までの距離を算出 CenterDistance = OutRadius - ( OutRadius - InRadius ) * j / ( CIRCLE_RADIUS_VERTEX_NUM - 1 ) ; での // 円の中心までの距離を算出 CenterDistance = OutRadius - ( OutRadius - InRadius ) * j / ( CIRCLE_RADIUS_VERTEX_NUM - 1 ) ; で 外側の円のサイズ-(外側の円のサイズ-内側の円のサイズ)*j/(半径の頂点数-1) のような式で円の中心までの距離がどうして出るのかが分からなかったのです。(こんな式みたことなかったので) で、これが何かしらの公式として存在すのか知りたかったのです。 あと、いちおう高校レベルまでの三角関数等は出来るつもりです。(実際どうかわかりませんが)
Re: 計算式の意味 ( No.3 )
名前:すにー 日時:2012/01/16 16:07

あまり詳しくは見ていないのですが答えれるところは 円周率/2.0/(半径の頂点数-1)の式は for( i = 0 ; i < CIRCLE_RADIUS_VERTEX_NUM ; i ++ ) { Angle=( PHI_F / 2.0f ) * ( (float)i / ( CIRCLE_RADIUS_VERTEX_NUM - 1 ) ) ; InCircleCosTable[ i ] = ( float )cos( ( double )Angle ) ; } という式と等価です 多分こっちの方が若干遅いです 外側の円のサイズ-(外側の円のサイズ-内側の円のサイズ)*j/(半径の頂点数-1)はこういうことです (AAやったことないからずれたらごめん)    ↓中心       ↓内側の円               ↓外側の円    |         |                   |          |         |--外側の円のサイズ-内側の円のサイズ---|    |         | | | | | | | | | | |  ←外側から(半径の頂点数-1)=Max等分    |         ↑j=Max       |         ↑j=0    |                   |------------------|    |                   | ↑(外側の円のサイズ-内側の円のサイズ)*(j/Max)    |--------------(例の式)----------------| あちこちに"-1"が出てるのは端っこが足りなくならないようにするためだと思われます 3本の木の間の空間は2つというやつです こんな感じにしたほうが厳密には正しいかもしれませんが面倒なので試していません 配列の大きさに注意してテストしてみてください (結果はCIRCLE_RADIUS_VERTEX_NUMが1つ増えた時と変わらないと思います) // 内側の盛り上がっているように見せる箇所で使用する Cos テーブルを作成する Angle = 0.0f ; for( i = 0 ; i <= CIRCLE_RADIUS_VERTEX_NUM ; i ++, Angle += ( PHI_F / 2.0f ) / ( CIRCLE_RADIUS_VERTEX_NUM ) ) { InCircleCosTable[ i ] = ( float )cos( ( double )Angle ) ; }
Re: 計算式の意味 ( No.4 )
名前:獅子 日時:2012/01/16 17:55

>Angle += ( PHI_F / 2.0f ) / ( CIRCLE_RADIUS_VERTEX_NUM - 1 ) > >で、 > >円周率/2.0/(半径の頂点数-1) > >のような式だったり おそらく、 コメントアウトされている通りcosテーブルの作成をするために、 ループでラジアンをずらしているだけかと思います… 三角関数は知っているがテーブル化を見たことがない…というかんじでしょうか?; すみません読解力が足りず… 三角関数のテーブル化なら検索すればたくさん出てきます 確か通常の三角関数はかなり低速なはずです。三角関数のテーブルは速度の改善などに使いますが 試していないのでハッキリはいえませんがリンク先のコードはとても重い処理なのかもしれません。 二つ目はすにーさんが説明していますが、 実際大した事はやっていません。こちらも特に公式があるとかでは無いと思います。 なので、両方とも特に公式があるとかでは無いと思います。 またこういうものが勉強できるサイトをよく知っているわけではありませんが、 検索したらたくさんでてきたのでご自身で検索したほうが早いとおもいます。 *なんか言い回しが変だったので修正しました
Re: 計算式の意味 ( No.5 )
名前:紙袋(解決) 日時:2012/01/16 20:23

すにーさん 図まで書いていただきありがとうございます。 この図を見て理解出来ました。こう見ると結構単純に出来てるんですね。 獅子さん cosテーブルというものを調べてみたら ただ使用する予定の物を配列にいれてるだけなんですね。おかげで分かりました。 これで疑問に思っていた事が分かったので解決にさせていただきます。また、何かありましたらよろしくお願いします。 ありがとうございました。

Page: 1 |