【问题标题】:Bisector plane between two panes? C#两个窗格之间的平分线平面? C#
【发布时间】:2017-12-20 14:43:48
【问题描述】:

我不知道如何解决这个问题,因为我使用的 API 具有基本上是原点的平面数据结构、定义平面的 x y 和 z 向量。

如果我有两个平面,我怎样才能找到平分线平面? 这种平面有数学描述吗?

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

任何帮助将不胜感激。

在我尝试过这样的事情之前,这得到了我想要的,但我想知道是否有不做交叉点的解决方案:

    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));
    }

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

【问题讨论】:

  • 我会认为两个平面之间的平分线是一条 line 因为会有无数个平面?例如一个书尾
  • 在几何上我使用的方法是这样的:1)使两个平面相交,得到一条线 2)通过 z 轴移动两个平面并再次相交。 3)从第一行和第二行中点构造平面。通过这种方式,我得到了我想要的正确平面。也许它被称为不平分线。但是有没有其他方法可以做到这一点而无需交叉?

标签: c# 3d geometry


【解决方案1】:

你已经有了相交线。现在在这条线上选择任意一点P作为基点。

获取这条线的方向向量(dL

获取给定平面S单位法线总和。这是位于平分线平面且垂直于交线的向量

S = (a.normal + b.normal)

现在计算dLSvector product得到正常

BisectorN = dL x S

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

bN = BisectorN.Normalize

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

【讨论】:

    【解决方案2】:

    我试过你的方法,它给出了平分线平面。但问题是平面在从原点和法线构造时会发生偏移,而不是从原点和两个 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);
    

    【讨论】:

    • 你是什么意思?两张图片看起来很相似。
    • 看绿色和红色轴 - x 和 y 轴
    • 这些轴的方向与预期不同?
    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多