Exemple #1
0
        /// <summary>
        /// 获取点在三角形平面上的重心空间坐标,不在平面返回false
        /// </summary>
        /// <param name="pos"></param>
        /// <param name="gravityPos"></param>
        /// <returns></returns>
        public bool GetGravityPos(Vector3 pos, out Vector3 gravityPos)
        {
            Plane plane = new Plane(m_Pos1, m_Pos2, m_Pos3);

            if (plane.InclusionPos(pos))
            {
                Vector3 d1 = m_Pos1 - pos;
                Vector3 d2 = m_Pos2 - pos;
                Vector3 d3 = m_Pos3 - pos;
                float   a1 = Vector3.Cross(d2, d3) * plane.normal;
                float   a2 = Vector3.Cross(d3, d1) * plane.normal;
                float   a3 = Vector3.Cross(d1, d2) * plane.normal;
                float   A  = Vector3.Cross(m_Pos3 - m_Pos2, m_Pos1 - m_Pos3) * plane.normal;
                gravityPos   = Vector3.zero;
                gravityPos.x = a1 / A;
                gravityPos.y = a2 / A;
                gravityPos.z = a3 / A;
                return(true);
            }
            else
            {
                gravityPos = Vector3.zero;
                return(false);
            }
        }
Exemple #2
0
        // 点是否在三角形内
        public bool InclusionPos(Vector3 pos)
        {
            Plane plane = new Plane(m_Pos1, m_Pos2, m_Pos3);

            if (plane.InclusionPos(pos))
            {
                Vector3 d1 = m_Pos1 - pos;
                Vector3 d2 = m_Pos2 - pos;
                Vector3 d3 = m_Pos3 - pos;
                float   a1 = Vector3.Cross(d2, d3) * plane.normal;
                float   a2 = Vector3.Cross(d3, d1) * plane.normal;
                float   a3 = Vector3.Cross(d1, d2) * plane.normal;
                if ((a1 >= 0 && a2 >= 0 && a3 >= 0) || (a1 <= 0 && a2 <= 0 && a3 <= 0))
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }