Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将两个不同的程序从右手软件镜像到左手软件_C#_Math_Unity3d - Fatal编程技术网

C# 将两个不同的程序从右手软件镜像到左手软件

C# 将两个不同的程序从右手软件镜像到左手软件,c#,math,unity3d,C#,Math,Unity3d,我试图将基于右手系统参考的软件的一些几何图形镜像到左手系统参考(Unity 3D)。我正在用C#在两个系统中开发它,一边是在Visual Studio中开发的程序,另一边是在Unity3D中开发的程序。下图说明了2种不同的参考系: 我拥有的代码如下: 在右撇子系统中: private List<Geometry> GetCADFromStation() { #region GetCADFromStationStep1 List<Ge

我试图将基于右手系统参考的软件的一些几何图形镜像到左手系统参考(Unity 3D)。我正在用C#在两个系统中开发它,一边是在Visual Studio中开发的程序,另一边是在Unity3D中开发的程序。下图说明了2种不同的参考系:

我拥有的代码如下:

在右撇子系统中:

 private  List<Geometry> GetCADFromStation()
    {
        #region GetCADFromStationStep1
        List<Geometry> PartCollection = new List<Geometry>();


        foreach (GraphicComponent component in _ActiveStation.GraphicComponents)
        {
            if (component is Part)
            {
                Geometry p = new Geometry();
                p.Name = component.Name;
                p.TransX = component.Transform.X;
                p.TransY = component.Transform.Y;
                p.TransZ = component.Transform.Z;
                p.RotX = -component.Transform.RX;
                p.RotY = -component.Transform.RY;
                p.RotZ = -component.Transform.RZ;
                PartCollection.Add((Geometry)p);
            }
        }
        #endregion

        return PartCollection;
    }
我在unity方面的重要功能是ChangeRotationToUnity(),它看起来是这样的:

  Quaternion ChangeRotationToUnity(Vector3 rotation)
{
    Vector3 flippedRotation = new Vector3(rotation.x, -rotation.y, -rotation.z);
    Quaternion qx = new Quaternion();
    Quaternion qy = new Quaternion();
    Quaternion qz = new Quaternion();
    Quaternion qq = new Quaternion();
    qx = Quaternion.AngleAxis(flippedRotation.x, Vector3.right);
    qy = Quaternion.AngleAxis(flippedRotation.y, Vector3.up);
    qz = Quaternion.AngleAxis(flippedRotation.z, Vector3.forward);
    qq = qz * qy * qx;
    return qq;
}
此功能基于此和此

尽管它的答案似乎合乎逻辑,但它不能正常工作。有人能帮我吗

  Quaternion ChangeRotationToUnity(Vector3 rotation)
{
    Vector3 flippedRotation = new Vector3(rotation.x, -rotation.y, -rotation.z);
    Quaternion qx = new Quaternion();
    Quaternion qy = new Quaternion();
    Quaternion qz = new Quaternion();
    Quaternion qq = new Quaternion();
    qx = Quaternion.AngleAxis(flippedRotation.x, Vector3.right);
    qy = Quaternion.AngleAxis(flippedRotation.y, Vector3.up);
    qz = Quaternion.AngleAxis(flippedRotation.z, Vector3.forward);
    qq = qz * qy * qx;
    return qq;
}