3d 三维线平面交点,具有简单平面

3d 三维线平面交点,具有简单平面,3d,geometry,line,plane,3d,Geometry,Line,Plane,我在3D空间中有两个点,它们的X坐标具有不同的符号。其中一个肯定在X平面的一边,另一个在另一边 现在我想用最简单和最优化的方法找到这个平面和由两点组成的线的交点 我知道如何做一般的线平面相交,但既然在这种情况下,平面就是x平面,我想应该有一些捷径可以走 谢谢 将两个点连接起来,然后使用(3D综合很简单)得到直线方程 然后求解x=0的方程 得到解决方案后,将它们翻译成您的编程语言。试试这个,我还在计算:)改进。。。让我知道它是否有效 A = (x1,y1,z1) B = (x2,y2,z2) C

我在3D空间中有两个点,它们的X坐标具有不同的符号。其中一个肯定在X平面的一边,另一个在另一边

现在我想用最简单和最优化的方法找到这个平面和由两点组成的线的交点

我知道如何做一般的线平面相交,但既然在这种情况下,平面就是x平面,我想应该有一些捷径可以走


谢谢

将两个点连接起来,然后使用(3D综合很简单)得到直线方程

然后求解x=0的方程


得到解决方案后,将它们翻译成您的编程语言。

试试这个,我还在计算:)改进。。。让我知道它是否有效

A = (x1,y1,z1)
B = (x2,y2,z2)
C = (x,y,z)
C将按比例分割连接A和B的线
x1/x2

因此,通过相似性(y,z)也将线连接(y1,z1)和(y2,z2)以相同的比率分开

因为点C位于Y-Z平面上

x = 0 

简单的例子:

A=(1,2,2)
B=(-2,2,2)
那么
C
应该是
(0,2,2)

代码C#:

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在左边。这个问题很老了,但既然有这么一个更方便的解决方案,我想它可能会对某人有所帮助

如果正确实施,一般情况下,在实践中几乎完全一样快

当用齐次坐标表示时,平面和直线交点非常优雅,但假设您只需要解决方案:

有一个向量4x1 p,它描述了平面,使得平面上任何齐次点的p^Tx=0。接下来计算线L=ab^T-ba^T的拔毛器坐标,其中a={point_1;1},b={point_2;1},线上的两个4x1计算:x=Lp={x0,x1,x2,x3}x_相交=({x0,x1,x2}/x3)


为了获得更高的性能,使用表达式模板将允许编译器将解决方案压缩到最小情况

如果你指的是x=0的平面,那么我称之为Y-Z平面。是的,这就是我指的可能重复的平面
y = (r*y2 + y1) / (r+1)

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

where r = |x1| / |x2|
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
 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);
        }
    }
P1 = (x1,y1,z1) P2 = (x2,y2,z2) k1 = -x2/(x1-x2) k2 = 1-k1 Intersection = k1*P1 + k2*P2 or: Ix = 0 - we know this one Iy = k1*y1 + k2*y2 Iz = k1*z1 + k2*z2