public Vector2 Solve2(float svd_tol, int sweeps, float pinv_tol)
{
Vector2 x = new Vector2(mass_point.X, mass_point.Y) / (float)Intersections.Count;
//return x;
float error = GetDistanceSquared(x);
if (Math.Abs(error) >= 0.0001f)
{
for (int i = 0; i < deltas.Length; i++)
{
Vector2 new_point = new Vector2(x.X + deltas[i].X, x.Y + deltas[i].Y);
//new_point = Vector2.Clamp(new_point, Vector2.Zero, Vector2.One);
float e = GetDistanceSquared(new_point);
if (e <= error)
{
x = new_point;
if (Math.Abs(e) < 0.0001f)
break;
error = e;
}
}
}
//if (x.X < 0 || x.Y < 0 || x.X >= 1 || x.Y >= 1)
// x = new Vector2(mass_point.X, mass_point.Y) / (float)Intersections.Count;
return Vector2.Clamp(x, Vector2.Zero, Vector2.One);
}