C# 如何求平面上光线的反射矢量?

C# 如何求平面上光线的反射矢量?,c#,C#,我有一个向量落在飞机上。我知道她确切地落在飞机上,我知道坠落的地点。我需要找到一个反射向量 该平面由其上的3个点表示 我做错了什么 public static Vector3 GetReflectedVector(Vector3 direction,Vector3 vert0, Vector3 vert1, Vector3 vert2) { Vector3 normalizeDirection = Normalize(direction); Ve

我有一个向量落在飞机上。我知道她确切地落在飞机上,我知道坠落的地点。我需要找到一个反射向量

该平面由其上的3个点表示

我做错了什么

    public static Vector3 GetReflectedVector(Vector3 direction,Vector3 vert0, Vector3 vert1, Vector3 vert2)
    {
        Vector3 normalizeDirection = Normalize(direction);

        Vector3 planeNormal = Normalize(Cross(vert1 - vert0, vert0 - vert2));

        double dot = Dot(normalizeDirection, planeNormal);

        double mod = VectorModule(planeNormal);

        double pr = dot / mod;

        Vector3 projection = planeNormal * (float)pr * 2f;

        return direction - projection;
    }
在这里,这种逻辑(应该是):

  • 获取平面{vert0,vert1,vert2}的法线
  • 获得法线上的方向投影
  • 将结果向量加倍
  • 从源向量dir中减去接收到的值

  • 答案如下:

        public static Vector3 GetReflectedVector(Vector3 direction,Vector3 vert0, Vector3 vert1, Vector3 vert2)
        {
            Vector3 normalizeDirection = Normalize(direction);
    
            Vector3 planeNormal = Normalize(Cross(vert1 - vert0, vert0 - vert2));
    
            return CombineVector(normalizeDirection, planeNormal, 1, (float)(-2 * Dot(normalizeDirection, planeNormal)));
        }
    
        private static Vector3 CombineVector(Vector3 v1, Vector3 v2, float f1, float f2)
        {
            Vector3 vector3;
    
            vector3.X = (f1 * v1.X) + (f2 * v2.X);
            vector3.Y = (f1 * v1.Y) + (f2 * v2.Y);
            vector3.Z = (f1 * v1.Z) + (f2 * v2.Z);
    
            return vector3;
        }
    

    入射角等于反射角,这是可以理解的。我需要找到这个向量