两个窗格之间的平分线飞机? C#

时间:2017-07-15 17:24:38

标签: c# 3d geometry

我不知道如何处理这个问题,因为我使用的是具有平面数据结构的API,它基本上是原点,x y和z矢量定义了一个平面。

如果我有两架飞机,我怎样才能找到平分机? 这种飞机是否有数学描述。

enter image description here

几何上我会通过计算平面之间的交叉线来解决这个问题,然后不知道如何定义平面方向的点。

非常感谢任何帮助。

在我尝试这样的事情之前,这就得到了我想要的东西,但我想知道是否有一个没有做交叉的解决方案:

    public static Plane BisectorPlane(Plane a, Plane b)
    {
        Rhino.Geometry.Intersect.Intersection.PlanePlane(a, b, out Line lnA);
        a.Translate(a.ZAxis);
        b.Translate(b.ZAxis);
        Rhino.Geometry.Intersect.Intersection.PlanePlane(a, b, out Line lnB);
        return new Plane( lnA.From,lnA.To,lnB.PointAt(0.5));
    }

我想知道是否有可能解决这个问题不是几何上的(计算交叉点)而是数学上的。

2 个答案:

答案 0 :(得分:0)

你已经有了一条交叉路口。现在选择此行的任何一点 P 来制作基点。

获取此行的方向向量( dL

获取给定飞机 S 单位法线的总和。这是位于平分线平面并垂直于交叉线的矢量

S =(a .normal + b.normal)

现在计算 dL vector product S 以获得正常

BisectorN = dL x S

如果需要,将其标准化(使单位长度除以其长度)

bN = BisectorN.Normalize

基点 P 和正常 bN 定义平分线平面。

答案 1 :(得分:0)

我尝试了你的方法,它给出了平分线。但问题是平面是从原点和法线构造而不是从原点和两个x和y轴构造的:

        Point3d origin = lnA.PointAt(0.5);
        Vector3d S = a.Normal + b.Normal;
        Vector3d dL = Vector3d.Subtract((Vector3d)lnA.From, (Vector3d)lnA.To);
        Vector3d BisectorN = Vector3d.CrossProduct(dL,S);
        BisectorN.Unitize();

        return new Plane(origin, BisectorN);

enter image description here