public void Update(Vector2 location) { if (performCalled) { return; } if (!firstSet) { firstLocation = location; firstSet = true; } var dot = Vector2.Dot(firstLocation.Normalize(), location.Normalize()); var angle = JryMath.Acos(dot); var a = (updated - center).Normalize(); var b = (location - center).Normalize(); angle = (float)(Math.Atan2(a.Y, a.X) - Math.Atan2(b.Y, b.X)); if (!float.IsNaN(angle)) { updatablePolygon.RotateSelected(angle, center); } updated = location; }
private float decideAngle(float x, float y) { if (x >= 0 && y >= 0) { return(JryMath.Acos(x)); } else if (x >= 0) { return(JryMath.Pi * 2 - JryMath.Acos(x)); } else if (y >= 0) { return(JryMath.Acos(x)); } else { return(JryMath.Pi * 2 - JryMath.Acos(x)); } }