3

3D 空間に 2 つのポイントがあり、X 座標の符号が異なります。そのため、そのうちの 1 つは X 平面の片側にあり、もう 1 つは反対側にあります。

今、私はこの平面と2点で構成される線の交点を最も単純で最適化された方法で見つけたいと思っています.

私は一般的な線平面の交差を行う方法を知っていますが、この場合、平面は単なる x 平面であるため、いくつかの近道が必要だと思います。

ありがとう!

4

4 に答える 4

6

2 点を結び、2点形式を使用して直線の方程式を取得します(3D の一般化は簡単です)。

次に、x = 0 の方程式を解きます。

ソリューションを入手したら、それらをプログラミング言語に翻訳します。

于 2010-03-15T13:26:41.537 に答える
2
P1 =(x1、y1、z1)
P2 =(x2、y2、z2)

k1 = -x2 /(x1-x2)
k2 = 1-k1

交差点=k1* P1 + k2 * P2または:
Ix=0-これはわかっています
Iy = k1 * y1 + k2 * y2
Iz = k1 * z1 + k2 * z2

P1が右に、P2が左にあると仮定します。逆にすると動作する場合があります。

于 2010-03-15T14:02:40.110 に答える
2

これを試してみてください私はまだ計算しています:)改善しています...うまくいくかどうか教えてください。

A = (x1,y1,z1)
B = (x2,y2,z2)
C = (x,y,z)

C は、A と B を結ぶ線を比率で分割しx1/x2ます。

したがって、類似度 (y,z) は、(y1,z1) と (y2,z2) を結ぶ線も同じ比率で分割します。

点 C は YZ 平面にあるため、

x = 0 

セクション式

y = (r*y2 + y1) / (r+1)

z = (r*z2 + z1) / (r+1)

where r = |x1| / |x2|

簡単な例:

してみましょう明らかにする必要がありA = (1,2,2)ます。B = (-2,2,2)C(0,2,2)

x = 0
r = 1 / 2 = 0.5
y = (0.5*2 + 2)/(0.5+1) = 2
z = (0.5*2 + 2)/(0.5+1) = 2

コード C#:

 public class Point
    {
        public double x { get; set; }
        public double y { get; set; }
        public double z { get; set; }

        public Point(double X, double Y, double Z)
        {
            x = X;
            y = Y;
            z = Z;
        }

        public override string ToString()
        {
            return string.Format("({0},{1},{2})",x,y,z);
        }
    }

    public class Program
    {
        public static void Main()
        {
            Point a = new Point(-10, 0, 10);
            Point b = new Point(10, 0, 0);

            Console.WriteLine(GetIntersectionWithYZ(a,b));
        }

        public static Point GetIntersectionWithYZ(Point A, Point B)
        {
            double r = - A.x / B.x;

            double y = (r * B.y + A.y) / (r + 1);
            double z = (r * B.z + A.z) / (r + 1);

            return new Point(0, y, z);
        }
    }
于 2010-03-15T13:43:46.727 に答える