public static bool IsNearBezierTest(Vector2 p, BezierCurve c, float accuracy, float maxDist) { Vector2 prepoint = c.Get(0); for (float i = accuracy; i < 1; i += accuracy) { var point = c.Get(i); float d = (p - point).sqrMagnitude; float d2 = (prepoint - point + new Vector2(maxDist, maxDist)).sqrMagnitude; if (d <= d2 * 2) { return(true); } } return(false); }
public static Vector2 NearestPointOnBezier(Vector2 p, BezierCurve c, float accuracy, bool doubleAc) { float minDist = Mathf.Infinity; float minT = 0; Vector2 minP = Vector2.zero; for (float i = 0; i < 1; i += accuracy) { var point = c.Get(i); float d = (p - point).sqrMagnitude; if (d < minDist) { minDist = d; minT = i; minP = point; } } if (!doubleAc) { return(minP); } float st = Mathf.Clamp01(minT - accuracy); float en = Mathf.Clamp01(minT + accuracy); for (var i = st; i < en; i += accuracy / 10) { var point = c.Get(i); var d = (p - point).sqrMagnitude; if (d < minDist) { minDist = d; minT = i; minP = point; } } return(minP); }
public static Vector2 NearestPointOnBezier(Vector2 p, BezierCurve c, float accuracy, bool doubleAc) { float minDist = Mathf.Infinity; float minT = 0; Vector2 minP = Vector2.zero; for (float i = 0 ;i<1;i+=accuracy) { var point = c.Get (i); float d = (p - point).sqrMagnitude; if (d<minDist) { minDist=d; minT = i; minP = point; } } if (!doubleAc) { return minP; } float st = Mathf.Clamp01 (minT-accuracy); float en = Mathf.Clamp01(minT + accuracy); for (var i=st;i<en;i+=accuracy/10) { var point = c.Get (i); var d= (p - point).sqrMagnitude; if (d<minDist) { minDist=d; minT = i; minP = point; } } return minP; }
public static bool IsNearBezierTest(Vector2 p, BezierCurve c, float accuracy, float maxDist) { Vector2 prepoint = c.Get (0); for (float i = accuracy;i<1;i+=accuracy) { var point = c.Get (i); float d = (p - point).sqrMagnitude; float d2 = (prepoint - point + new Vector2(maxDist,maxDist)).sqrMagnitude; if (d<=d2*2) { return true; } } return false; }