コード例 #1
0
ファイル: Polygon3F.cs プロジェクト: zparr/ATF
        private bool IsReflex(LinkedListNode <TriVx> node, Vec3F normal)
        {
            TriVx v0 = PrevNode(node).Value;
            TriVx v1 = node.Value;
            TriVx v2 = NextNode(node).Value;

            return(!IsLeftOf(v0, v1, v2, normal));
        }
コード例 #2
0
ファイル: Polygon3F.cs プロジェクト: zparr/ATF
        private bool IsEar(LinkedListNode <TriVx> node, Vec3F normal)
        {
            bool  isEar = true;
            TriVx v0    = PrevNode(node).Value;
            TriVx v1    = node.Value;
            TriVx v2    = NextNode(node).Value;

            foreach (TriVx v in node.List)
            {
                if (v.IsReflex && v != v0 && v != v1 && v != v2)
                {
                    // Chec for containment
                    if (IsLeftOf(v0, v1, v, normal) &&
                        IsLeftOf(v1, v2, v, normal) &&
                        IsLeftOf(v2, v0, v, normal))
                    {
                        isEar = false;
                    }
                }
            }
            return(isEar);
        }
コード例 #3
0
ファイル: Polygon3F.cs プロジェクト: zparr/ATF
        private bool IsLeftOf(TriVx v0, TriVx v1, TriVx v2, Vec3F normal)
        {
            Vec3F cross = Vec3F.Cross(v1.V - v0.V, v2.V - v0.V);

            return(Vec3F.Dot(cross, normal) > 0.0f);
        }
コード例 #4
0
ファイル: Polygon3F.cs プロジェクト: JanDeHud/LevelEditor
 private bool IsLeftOf(TriVx v0, TriVx v1, TriVx v2, Vec3F normal)
 {
     Vec3F cross = Vec3F.Cross(v1.V - v0.V, v2.V - v0.V);
     return Vec3F.Dot(cross, normal) > 0.0f;
 }