コード例 #1
0
        /// <summary> Simple implementation of 2D triangulation by checking minimal circles not containing any point </summary>
        public static List <int> Simple(List <Vector2> points)
        {
            var ts = new List <int>();

            var normal = Vector3.back;

            for (int i = 0; i < points.Count; ++i)
            {
                var iPoint = points[i];

                for (int j = i + 1; j < points.Count; ++j)
                {
                    var jPoint = points[j];

                    for (int k = j + 1; k < points.Count; ++k)
                    {
                        var kPoint = points[k];

                        if (Circles.TryCreate(iPoint, jPoint, kPoint, out var c, out var r))
                        {
                            bool contains = false;
                            for (int l = 0; !contains && l < points.Count; ++l)
                            {
                                if (l == i || l == j || l == k)
                                {
                                    continue;
                                }

                                contains = Circles.Contains(c, r, points[l]);
                            }

                            if (!contains)
                            {
                                var triangleNormal = Triangles.Normal(iPoint, jPoint, kPoint);

                                if (Vector3.Dot(triangleNormal, normal) > 0)
                                {
                                    ts.AddRange(i, j, k);
                                }
                                else
                                {
                                    ts.AddRange(k, j, i);
                                }
                            }
                        }
                    }
                }
            }

            return(ts);
        }
コード例 #2
0
        public static float Radius(float w, float h, float a)
        {
            var p = Circles.Point(a);

            return((w * h) / Mathf.Sqrt(w * w * p.x * p.x + h * h * p.y * p.y));
        }