ベクトルと三角形の辺の交差


7

ユーザーがこの三角形の内側の点の周りをドラッグできるiOS用の三角形のタッチサーフェスを作成しようとしています。このページの情報を使用すると、ドラッグしたポイントが三角形の内側にあるか外側にあるかを簡単に判断できます。ただし、ユーザーが三角形の外側をドラッグした場合、ポイントを三角形のエッジにクリップします。

ユーザーの指がこれらのエッジの外側をドラッグする場合は、ベクトルuまたはvをそれぞれゼロに設定する必要があるだけなので、これはサイドABおよびサイドACの場合は簡単です。ただし、BC側のポイントpを見つける方法がわかりません。ユーザーがエッジBCの外に指をドラッグした場合、この交点を見つける必要があります。

点とベクトルのラベルが付いた三角形


Dotproductを使用して、ベクトル(BC)上のベクトル(B(u + v))のスカラー投影を取り、それをBCの2乗の長さで除算します。
Martijn Courteaux 2012

回答:


2

エッジBC上のすべてのポイントには、| u |というプロパティがあります。+ | v | = 1.このプロパティがtrueになるように長いベクトルの大きさを小さくすると、交点が得られます。あなたの写真では、これはvの大きさを0.245764829343853減らすことを意味します。これは、Aから指までのラインがBCを横切る場合にのみ機能します。


1
詳しく説明すると、u + v> 1が検出された場合は、(u、v)の値を1 /(u + v)でスケーリングします。これにより、u + vベクトルが短くなり、エッジに正しく配置されます。
ネイサンリード

1

A、B、C(Ax、Ayなどと呼びます)の座標があり、D = u + vであるとすると、交点は次のようになります。

X = ((Bx - Cx) (Ax * Dy - Ay * Dx) - (Bx * Cy - By * Cx) (Ax - Dx))/((By - Cy) (Ax - Dx) - (Bx - Cx) (Ay - Dy))

Y = ((By - Cy) (Ax * Dy - Ay * Dx) - (Bx * Cy - By * Cx) (Ay - Dy))/((By - Cy) (Ax - Dx) - (Bx - Cx) (Ay - Dy))

ラインとラインの交差に関するウィキペディアの記事も参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.