私はしばらく頭を傷つけています。3D空間内の円上の点を計算する
私は3次元空間に2つの定義されたベクトルを持っています。ベクトルXを(0,0,0)に、ベクトルYを(3,3,3)にします。私はそれらの2つのベクトル間の線上にランダムな点を得ます。そして、この点について、私は与えられた半径でXとYの間の線に垂直な円(いくらかの点)を形成したいと思います。
私は何を求めているのか明確にしています。私は多くの同様の質問を見てきましたが、それらに基づいてそれを理解することはできません。助けてくれてありがとう。
編集: は @WillyWonka(couldntのコメントので、ここでそれを追加することにすべてをかける)
こんにちは、お返事に感謝、私はあなたのソリューションを実装するといくつかの適度な成功を持っていたが、それにいくつかの問題を持っています。それは、Yポイントが(20,20,20)のような位置にある特定のシナリオを除いて、ほとんどの場合に機能します。もしそれがどんな軸にも直接座っていれば、その罰金。
しかし、斜めになるとすぐに、垂直点と原点の距離が何らかの理由で小さくなり、非常に特定の対角位置では、ちょうど垂直点が反転します。ここで
は、あなたが何をあなたが最初にやりたいことはラインXYに垂直平面の直交する2つの基底ベクトルを見つけることです
public Vector3 X = new Vector3(0,0,0);
public Vector3 Y = new Vector3(0,0,20);
Vector3 A;
Vector3 B;
List<Vector3> points = new List<Vector3>();
void FindPerpendicular(Vector3 x, Vector3 y)
{
Vector3 direction = (x-y);
Vector3 normalized = (x-y).normalized;
float dotProduct1 = Vector3.Dot(normalized, Vector3.left);
float dotProduct2 = Vector3.Dot(normalized, Vector3.forward);
float dotProduct3 = Vector3.Dot(normalized, Vector3.up);
Vector3 dotVector = ((1.0f - Mathf.Abs(dotProduct1)) * Vector3.right) +
((1.0f - Mathf.Abs(dotProduct2)) * Vector3.forward) +
((1.0f - Mathf.Abs(dotProduct3)) * Vector3.up);
A = Vector3.Cross(normalized, dotVector.normalized);
B = Vector3.Cross(A, normalized);
}
こんにちは、あなたの返信をありがとう、私はあなたのソリューションを実装することで中程度の成功を収めましたが、いくつかの問題があります。それは、Yポイントが(20,20,20)のような位置にある特定のシナリオを除いて、ほとんどの場合に機能します。もしそれがどんな軸にも直接座っていれば、その罰金。 – CosmicSeizure
@CosmicSeizure Xについてはどうですか?それはいつも(0、0、0)ですか?あなたがドットチェックをするときにXYを正規化するのを忘れないでください(この場合、その(1/sqrt(3)、1/sqrt(3)、1/sqrt(3))) –
こんにちは、画像を見てください。ありがとう。 XとYは任意の位置にあり得る。 – CosmicSeizure