C# 如何求平面上光线的反射矢量?
我有一个向量落在飞机上。我知道她确切地落在飞机上,我知道坠落的地点。我需要找到一个反射向量 该平面由其上的3个点表示 我做错了什么C# 如何求平面上光线的反射矢量?,c#,C#,我有一个向量落在飞机上。我知道她确切地落在飞机上,我知道坠落的地点。我需要找到一个反射向量 该平面由其上的3个点表示 我做错了什么 public static Vector3 GetReflectedVector(Vector3 direction,Vector3 vert0, Vector3 vert1, Vector3 vert2) { Vector3 normalizeDirection = Normalize(direction); Ve
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;
}
在这里,这种逻辑(应该是):
答案如下:
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;
}
入射角等于反射角,这是可以理解的。我需要找到这个向量