[MSCE C#]获取控件中平面图案的顶点坐标

各位老师,假如三位空间中有这样一个平面图案(cell),该如何去获取它的四个顶点坐标?

Parents Reply Children
  • 郭老师,我才了解包围盒的点,不一定是图形的上的点,所以我通过遍历子元素找到不共线的点,您上面说的通过叉乘计算分量来求旋转矩阵没太搞明白,我是通过下面的过程计算旋转矩阵

    //假如已知平面三个点,pt1、pt2、ev.Point
    //1.求平面法向量,旋转后向量
    DVector3d vec1 = new DVector3d(ds[0] - ev.Point);
    DVector3d vec2 = new DVector3d(ds[1] - ev.Point);
    vec1.TryNormalize(out vec1);
    vec2.TryNormalize(out vec2);
    DVector3d vecN = vec1.CrossProduct(vec2);
    vecN.TryNormalize(out vecN);
    //2.XOY平面法向量,旋转前向量
    DVector3d vecT = DVector3d.FromXYZ(0, 0, 1);
    //3.求两向量夹角φ
    double fa = Math.Acos(vecT.DotProduct(vecN));
    Angle fi = Angle.FromRadians(fa);
    //4.根据旋转轴(垂直于vecN和vecT的向量)和夹角φ求解旋转矩阵R
    DVector3d Axis = vecT.CrossProduct(vecN);
    Axis.TryNormalize(out Axis);
    DTransform3d dtran = DTransform3d.FromRotationAroundLine(DPoint3d.Zero, Axis, fi);

    但是结果并不对,希望能指点一下Cry

  • 平面上两个向量(a,b)叉乘后得到一个向量c,向量c再与a叉乘得到向量d,此时a,d,c就是三个两两垂直的向量了。以这个三个向量构造出旋转矩阵就可以了。需要注意的是,a应该是单元图案上边界平行的一个向量。

    Answer Verified By: 小 子