Unity 關於計算線和麵的交點
阿新 • • 發佈:2021-01-27
關於射線和麵相交的理論在這裡無需贅述
這裡展示的是使用向量和三角函式來計算的線和麵的交點
個人感覺程式碼裡面使用向量和三角函式來計算比較方便寫
/// <summary> /// 計算射線和麵的交點 /// 會有一定誤差 , 浮點數計算沒有辦法 /// </summary> /// <param name="ray">射線</param> /// <param name="normal">面的法線</param> /// <param name="Point">面上的一點</param> /// <param name="ret">交點</param> /// <returns>線和麵是否相交</returns> bool intersectionOfRayAndFace(Ray ray, Vector3 normal,Vector3 Point, out Vector3 ret) { if (Vector3.Dot(ray.direction, normal) == 0) { //如果平面法線和射線垂直 則不會相交 ret = Vector3.zero; return false; } Vector3 Forward = normal; Vector3 Offset = Point - ray.origin; //獲取線的方向 float DistanceZ = Vector3.Angle(Forward, Offset); //計算夾角 DistanceZ = Mathf.Cos(DistanceZ / 180f * Mathf.PI) * Offset.magnitude; //算點到面的距離 DistanceZ /= Mathf.Cos(Vector3.Angle(ray.direction, Forward) / 180f * Mathf.PI); //算點沿射線到面的距離 ret = ray.origin + ray.direction * DistanceZ; //算得射線和麵的交點 return true; }