MathNet Ray3D坐标系下转换

将一个Ray3D对象在两个笛卡尔坐标下进行转换初探。尝试了用CoordinateSystem.Transform(Ray3D ray) 的方法,但没有得到期待结果。这款还是觉得现在这块还有问题。

            CoordinateSystem originCS = new CoordinateSystem();//初始一个笛卡尔坐标系
            Console.WriteLine("originCS" + originCS);
            Angle angle = Angle.FromRadians(Math.PI/2);
            CoordinateSystem rotationCS = originCS.RotateCoordSysAroundVector(UnitVector3D.ZAxis, angle);
            Console.WriteLine("orginCS.RotateCoordSysAroundVector: " + rotationCS);
            CoordinateSystem cs3 = rotationCS.OffsetBy(new Vector3D(5, 5, 0)); //转换后的坐标系

//实际是两个坐标系下转换Matrix
            CoordinateSystem mappingCS3ToOrigin = CoordinateSystem.CreateMappingCoordinateSystem(cs3, originCS);
            CoordinateSystem mappingOriginToCS3 = CoordinateSystem.CreateMappingCoordinateSystem(originCS, cs3);

//点在两坐标系下的转换
            Point3D por = new Point3D(0, 8, 0);//origin中坐标系下一点的坐标
            Point3D tcs = por.TransformBy(mappingCS3ToOrigin); //CS下坐标     
            Point3D tor = tcs.TransformBy(mappingOriginToCS3); //origin下坐标 
            Console.Out.WriteLine("tcs=" + tcs.ToString() + " tor=" + tor.ToString());


//抓换射线
            Ray3D ray = new Ray3D(por, UnitVector3D.Create(-1, 1, 0));//origin
            Console.Out.WriteLine("ray=" + ray);
            Ray3D rayCS = new Ray3D(ray.ThroughPoint.TransformBy(mappingCS3ToOrigin),
                ray.Direction.TransformBy(mappingCS3ToOrigin)); //cs3下了
            Console.Out.WriteLine("rayCS=" + rayCS);
            Ray3D rayback = new Ray3D(rayCS.ThroughPoint.TransformBy(mappingOriginToCS3),
                rayCS.Direction.TransformBy(mappingOriginToCS3));
            Console.Out.WriteLine("rayback=" + rayback);//origin下了


//运行部分结果
tcs=(3, 5, 0) tor=(-8.88178419700125E-16, 8, 0)
ray=ThroughPoint: (0, 8, 0), Direction: (-0.707106781186548, 0.707106781186548, 0)
rayCS=ThroughPoint: (3, 5, 0), Direction: (0.707106781186548, 0.707106781186548, 0)
rayback=ThroughPoint: (-8.88178419700125E-16, 8, 0), Direction: (-0.707106781186548, 0.707106781186548, 0)

 

你可能感兴趣的:(c#,线性代数,矩阵)