public List<Vector2> TranslateTo(Vector2 point) { Vector2 center = Gesture.GetCenter(this.Points); List<Vector2> translatedPoints = new List<Vector2>(); for (int i = 0; i < this.Points.Count; i++) { float x = this.Points[i].x + point.x - center.x; float y = this.Points[i].y + point.y - center.y; translatedPoints.Add(new Vector2(x, y)); } return translatedPoints; }
public List<Vector2> RotateBy(float angle) { Vector2 center = Gesture.GetCenter(this.Points); float cos = Mathf.Cos(angle); float sin = Mathf.Sin(angle); List<Vector2> rotatedPoints = new List<Vector2>(); for (int i = 0; i < this.Points.Count; i++) { float x = (this.Points[i].x - center.x) * cos - (this.Points[i].y - center.y) * sin + center.x; float y = (this.Points[i].x - center.x) * sin + (this.Points[i].y - center.y) * cos + center.y; rotatedPoints.Add(new Vector2(x, y)); } return rotatedPoints; }
public static float GetIndicativeAngle(List<Vector2> points) { Vector2 centroid = Gesture.GetCenter(points); return Mathf.Atan2(centroid.y - points[0].y, centroid.x - points[0].x); }