1. 程式人生 > 其它 >Unity 關於計算線和麵的交點

Unity 關於計算線和麵的交點

技術標籤:學習筆記unity3dc#

關於射線和麵相交的理論在這裡無需贅述
這裡展示的是使用向量和三角函式來計算的線和麵的交點
個人感覺程式碼裡面使用向量和三角函式來計算比較方便寫

		/// <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;
        }