public static bool IsNearBezier(Vector2 p, Drawing.BezierPoint point1, Drawing.BezierPoint point2, float rad)
    {
        if (point1.curve2 != point2.curve1)
        {
            Debug.LogError("Curves Not The Same");
            return(false);
        }

        Drawing.BezierCurve curve = point1.curve2;

        var r = curve.rect;

        r.x      -= rad;
        r.y      -= rad;
        r.width  += rad * 2;
        r.height += rad * 2;

        if (!r.Contains(p))
        {
            return(false);
        }

        var nearest = NearestPointOnBezier(p, curve, 0.1f, false);

        var sec = point1.curve2.aproxLength / 10;

        if ((nearest - p).sqrMagnitude >= (sec * 3) * (sec * 3))
        {
            return(false);
        }

        nearest = NearestPointOnBezier(p, curve, 0.01f, true);

        if ((nearest - p).sqrMagnitude <= rad * rad)
        {
            return(true);
        }

        return(false);
    }
Beispiel #2
0
    public void test()
    {
        float startTime = Time.realtimeSinceStartup;
        float w         = 100;
        float h         = 100;

        Drawing.BezierPoint p1 = new Drawing.BezierPoint(new Vector2(10, 0), new Vector2(5, 20), new Vector2(20, 0));
        Drawing.BezierPoint p2 = new Drawing.BezierPoint(new Vector2(50, 10), new Vector2(40, 20), new Vector2(60, -10));
        Drawing.BezierCurve c  = new Drawing.BezierCurve(p1.main, p1.control2, p2.control1, p2.main);
        p1.curve2 = c;
        p2.curve1 = c;
        Vector2 elapsedTime = new Vector2((Time.realtimeSinceStartup - startTime) * 10, 0);
        float   startTime2  = Time.realtimeSinceStartup;

        for (int i = 0; i < w * h; i++)
        {
            Mathfx.IsNearBezier(new Vector2(Random.value * 80, Random.value * 30), p1, p2, 10);
        }

        Vector2 elapsedTime2 = new Vector2((Time.realtimeSinceStartup - startTime2) * 10, 0);

        Debug.Log("Drawing took " + elapsedTime.ToString() + "  " + elapsedTime2.ToString());
    }
Beispiel #3
0
    void test()
    {
        float startTime = Time.realtimeSinceStartup;
        var w = 100;
        var h = 100;
        var p1 = new Drawing.BezierPoint(new Vector2(10, 0), new Vector2(5, 20), new Vector2(20, 0));
        var p2 = new Drawing.BezierPoint(new Vector2(50, 10), new Vector2(40, 20), new Vector2(60, -10));
        var c = new Drawing.BezierCurve(p1.main, p1.control2, p2.control1, p2.main);
        p1.curve2 = c;
        p2.curve1 = c;
        Vector2 elapsedTime = new Vector2((Time.realtimeSinceStartup - startTime) * 10, 0);
        float startTime2 = Time.realtimeSinceStartup;
        for (var i = 0; i < w * h; i++)
        {
            Mathfx.IsNearBezier(new Vector2(Random.value * 80, Random.value * 30), p1, p2, 10);
        }

        Vector2 elapsedTime2 = new Vector2((Time.realtimeSinceStartup - startTime2) * 10, 0);
        Debug.Log("Drawing took " + elapsedTime.ToString() + "  " + elapsedTime2.ToString());

    }