两个窗格之间的平分面?C#
我不知道如何解决这个问题,因为我使用的API具有平面数据结构,基本上是定义平面的原点、XY和z向量 如果我有两个平面,如何找到平分面? 这种平面有数学描述吗 从几何学上讲,我会通过计算平面之间的交线来解决这个问题,但不知道如何定义平面方向的点 任何帮助都将不胜感激 在我尝试这样的方法之前,我得到了我想要的,但我想知道是否有一个不做交叉点的解决方案:两个窗格之间的平分面?C#,c#,3d,geometry,C#,3d,Geometry,我不知道如何解决这个问题,因为我使用的API具有平面数据结构,基本上是定义平面的原点、XY和z向量 如果我有两个平面,如何找到平分面? 这种平面有数学描述吗 从几何学上讲,我会通过计算平面之间的交线来解决这个问题,但不知道如何定义平面方向的点 任何帮助都将不胜感激 在我尝试这样的方法之前,我得到了我想要的,但我想知道是否有一个不做交叉点的解决方案: public static Plane BisectorPlane(Plane a, Plane b) { Rhi
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));
}
我想知道是否有可能解决这个问题,不是几何上的(计算交点),而是数学上的。你已经得到了交点。现在在这条线上选择任意一点P,作为基点 获取此行的方向向量(dL) 获取给定平面S的单位法线之和。这是位于平分面上的向量,垂直于相交线 S=(a.正常+b.正常) 现在计算dL和S以获得正常值
BisectorN = dL x S
如果需要,将其规格化(使单位长度除以其长度)
bN = BisectorN.Normalize
基点p和法线bN定义平分面 我试过你的方法,它给出了平分面。但问题是,平面在从原点和法线构造时发生移动,而不是从原点和两个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);
我会认为两个平面之间的平分线是一条直线,因为会有一个无限多的平面?e、 书的结尾我使用的方法是:1)两个平面相交,得到一条直线2)沿z轴移动两个平面,然后再次相交。3) 从第一条线和第二条线的中点构造平面。这样我就得到了我想要的正确的飞机。也许它被称为非平分线。但有没有其他方法可以在没有交叉路口的情况下做到这一点?你指的是什么转变?两张图片看起来很相似。看看绿色和红色的轴-x轴和y轴,这些轴的方向和预期的不同?