サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
新内閣発足
www5d.biglobe.ne.jp/~tomoya03
左図のようにバラバラに点在した点を線分で結び、 お互い交差することがないように多角形(閉路)を描画するには? これは意外に簡単で、互いの点の位置関係を調べ、ソート を用いるだけで実行できます。 互いの座標の位置関係を調べるために、まず基準点を決めます。 基準点は、最も小さい y値( = y0とする)をもつ頂点とします。 そして、y = y0 の直線を仮想的に引き、その直線と、 基準点と各頂点を結ぶ線分による角度αを各点につき求めます。 基準点に「最も小さい y値( = y0)をもつ頂点」を選んだ理由は、 その角度が 0~180度 に限定されるようにするためです。こうしておくと、 プログラムが非常に簡略化されます。角度αは、左下記の式により求めます。 最後に、その角度αに対して各点を昇順あるいは降順にソートすれば、 多角形が描かれるように点が順序通り並びます。 下のコードで描画される多角形は
ある実験で、何らかの要因が他の要因とどれだけ関わりがあるかを調べる 時、その2つの要因を(x,y)としてとり、グラフ化してやると一目でその傾向が 分かります。(身近な物で言うと、人の身長と体重かな・・・。) また、そのプロットに対して直線や曲線を引くことができれば、 それを式にする事もできるので、統計分析の幅も広がります。 ある実験結果をグラフプロットし、そのプロットに対して 近似直線を引くことは、 その実験結果をy=ax+bの形の式で表せることにもなります。 そしてその式を用いて x にある値を代入すれば未知のyを求めることができ(その逆も)、 度々実験をしなくてもある程度の予測をつけることができます。 これは当然と言えば当然なのですが科学的には非常に 重要なことです。 学校の教科書に出てくる公式は、偉ーい学者さんたちが何度も 実験→プロット→統計分析して得られた結果なわけですね。 公式
難しい判定のようにも見えますが、三角形による包含判定に関しては 簡単に行うことができます。 「幾何アルゴリズムの神髄は『解釈』にあり」 ということで、上の定義を用います。 三角形による包含判定は、 「三角形を構成する3点を通る3直線を境界線として ある点Pと三角形の中心がその3直線に対して、 同じ側に存在すれば、ある点Pは三角形に包含している」 と考えることができます。 つまり、3直線とある点P,中心を結ぶ線分の交差判定を 行い、どれも交差しなければ、ある点が三角形に包含していることになります。 '構造体 Private Type POINT x As Double y As Double End Type '座標 p1,p2 を通る直線と座標 p3,p4 を結ぶ線分が交差しているかを調べる '戻り値 '= 0 - 直線上に線分の1点 or 2点がある '< 0 - 直線と線分が交差する
*** (今回のサンプルもあくまで理論の追求を目的としました。ので、実際にこういう方法が 用いられることはあまりないと思います。(^^)) あかん、まだ勉強不足だ・・・。 *** 簡単な補間理論で紹介した方法では、点の数が多いと 高次の式になり、うまく補間できません。それを補い大量の点を曲線で結ぶ方法として、 「2点ずつ補間し、(点の数 - 1)個の多項式によって、曲線を描く」 という方法を用います。 これはスプライン補間的な考え方ですが、冒頭で触れたように、下のような 方法が一般的なものではないと思います。(^^) 2点間を結ぶ多項式は、 「曲線は、(点の数 - 1)次の多項式で表すことができる」 という理論から、1次式になります。 しかし、描かれる曲線は直線ではなく、滑らかな線である必要があります。 描かれる曲線は、なめらかで急に折れ曲がったりしないものであることが 条件なので、高次の
§Algorithm§ 一覧表(項目数=26 01/01/15現在) 回数 題目 公開日 更新日 ●統計(4項目) 第26回 簡単な補間理論その二 UP! 01/01/15 01/01/15 第25回 簡単な補間理論 00/12/31 00/12/31 第24回 最小二乗法による回帰直線 00/12/25 00/12/25 第13回 偏差値を求める 00/05/10 00/05/10 ●探索(1項目) 第23回 文字列の探索 00/11/25 00/11/25 ●算数(2項目) 第22回 n進数→m進数への変換 00/11/05 00/11/05 第1回 最大公約数を求める 99/11/19 99/11/20 ●データ構造(1項目) 第21回 PictureBox の二次元配列化~パレットの作成~ 00/10/02 00/10/02 ●幾何(6項目) 第15回 直接的な線分交差判定 00/
線分交差判定といっても、すべての与えられた線分に対して、同様な計算を 行って判定していたのでは、無駄が多いように見えます。場合によっては もっと単純な軽い判定で行えるはずです。そこで、 『場合分けによるラフチェック』を もっと簡単に-線分交差判定-のプロシージャ に追加して、次のように変更します。 '構造体 Private Type POINT x As Double y As Double End Type '座標 p1,p2 を結ぶ線分と座標 p3,p4 を結ぶ線分が交差しているかを調べる 'ただし、線分が重なっている場合(3点,4点が一直線上にある)、「交差している」、と判定します。 Private Function intersectionEX(p1 As POINT, p2 As POINT, _ p3 As POINT, p4 As POINT) As Boolean 'x座標
ここでは、線分交差判定の定石ともいえる方法を紹介しています。 線分と直線の見落としがちな大切な定義です。
統計第四弾! Class Library に グラフプロット を追加しました。 グラフプロットを行うクラスです。まだコードも乱れていて未完成版ですが、 制御系でアナログ値をリアルタイム表示したいときなどに利用しやすいように作成しました。
ちょっとややこしくなりますが、これも同様な計算方法で、 a=1,b=2,c=3を導き出すことができます。 さらに未知数が増えて4つでは? ・・・もはや、消去→代入法の計算方法では限界があります。 そのような多元連立方程式をどのように解くか? ここでは、その一番シンプルな解法を紹介しています。 上記の3元連立方程式を例に取り進めていきます。 2a + 2b + 3c = 15 --- (1) 3a + 5b + 2c = 19 --- (2) 5a + 3b + 3c = 20 --- (3) の解は、a=1,b=2,c=3ですが、 これは次のように表すこともできます。 1a + 0b + 0c = 1 --- (1)' 0a + 1b + 0c = 2 --- (2)' 0a + 0b + 1c = 3 --- (3)' そうすると、もし上の式から下の式に変換することが できるならば、解を
このページを最初にブックマークしてみませんか?
『www5d.biglobe.ne.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く