スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

今日は数学

昨日の続き。
とりあえず速度どうでもいいとして作ったので最適化必要な場所多数あるかもです。
例のごとくインデントはFC2に文句言ってください。

a1,a2を端点とする線分とb1,b2を端点とする線分の交差判定(2D)
bool IntersectionFlg(Vector2 a1, Vector2 a2, Vector2 b1, Vector2 b2)
{
return (cross(a2 - a1, b1 - a1) * cross(a2 - a1, b2 - a1) < 0) && (cross(b2 - b1, a1 - b1) * cross(b2 - b1, a2 - b1) < 0);
}


a1,a2を端点とする線分とb1,b2を端点とする線分の交点計算(2D)
Vector2 Intersection(Vector2 a1, Vector2 a2, Vector2 b1, Vector2 b2)
{
Vector2 b = b2 - b1;
float d1 = Math.Abs(cross(b, a1 - b1));
float d2 = Math.Abs(cross(b, a2 - b1));
float t = d1 / (d1 + d2);
return a1 + (a2 - a1) * t;
}


ベクトル a と b の内積(2D)
double dot(Vector2 a, Vector2 b)
{
return a.X * b.X + a.Y * b.Y;
}


ベクトル a と b の外積(2D)
double cross(Vector2 a, Vector2 b)
{
return a.X * b.Y - a.Y * b.X;
}


3次元で2つの線が一番近くなる時の距離
引数
ベクトル1上のどこかの1点
ベクトル1
ベクトル2上のどこかの一点
ベクトル2

戻り値
一番近い時の距離
float LineDistance(Vector3 a, Vector3 Va, Vector3 b, Vector3 Vb)
{
Vector3 N = Vector3.Cross(Va, Vb);
//比較した二つのベクトルが平行な場合
if (N==Vector3.Zero) { MessageBox.Show("カメラの視線が平行です 正しい結果が得られません"); }
//NをノーマライズしたときはNanが入るのでこっちで
//if(float.IsNaN(N.X)||float.IsNaN(N.Y)||float.IsNaN(N.Z)){ MessageBox.Show("カメラの視線が平行です 正しい結果が得られません"); }
float d = Math.Abs(Vector3.Dot(N,b - a))/N.Length();
return d;
}

math.jpg
ベクトル2の平面として捕らえ、外積から法線Nを求める。
coθ=d/|V3|になることから。(ってd書き込むの忘れてた。汗。求めたい赤い線の長さがdっす)
内積の公式を意識して展開
d = cosθ|V3| = cosθ|V3||N|/|N| = |V3・N|/|N|

となる。

っと、ここまで来て距離じゃなくて点が欲しいことに気づく。しまった!
疲れてきたので残りはネットで検索~と楽をしようとしてもなかなか例がない・・・

どこかの教授のどこかの説明書きみたいのから持ってきた。

V1上の最近点を「P1にパラメータs*V1を加えたもの」だと考えるとパラメータは次のように表せる。

float s = ((V2.Length() * V2Len.Length() * Vector3.Dot(P2 - P1, V1))- (Vector3.Dot(V1, V2) * Vector3.Dot(P2 - P1, V2)))/ ((V1.Length() * V1.Length() * V2.Length() * V2.Length()) - (Vector3.Dot(V1, V2) * Vector3.Dot(V1, V2)));

わかりやすく一個の式にしたはずがすごいことになっております。
書き直すのめんどいのでこのままで。

無事求まったかどうかデバッグ画面
makeview.jpg

グラフをぐりぐり動かしてどの形でもそれっぽい線を引いていたので数値的な検証が皆無だけどOKとしよう。。(いいのだろうか)

明日注文した安物WEBカメラが届く。昨日トイザラスでアクションフィギュアをまるでクリスマスプレゼントを買うような顔をして購入してきた。ナイスだ!時期!

ねよっと。



コメントの投稿

非公開コメント

プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。