}
-/*virtual*/ Object * Line::Mirror(Vector p1, Vector p2)
+/*virtual*/ void Line::Mirror(Point p1, Point p2)
{
-#if 1
Point l1 = Geometry::MirrorPointAroundLine(position, p1, p2);
Point l2 = Geometry::MirrorPointAroundLine(endpoint, p1, p2);
- return new Line(l1, l2);
-#else
- Vector normal = Vector::Normal(p1, p2);
- Vector p4 = position + normal;
-
- // Find the intersection of the line and position + normal to the line
- double px = (((p1.x * p2.y) - (p1.y * p2.x)) * (position.x - p4.x))
- - ((p1.x - p2.x) * ((position.x * p4.y) - (position.y * p4.x)));
- double py = (((p1.x * p2.y) - (p1.y * p2.x)) * (position.y - p4.y))
- - ((p1.y - p2.y) * ((position.x * p4.y) - (position.y * p4.x)));
- double d = ((p1.x - p2.x) * (position.y - p4.y))
- - ((p1.y - p2.y) * (position.x - p4.x));
-
- // px = (x1y2 - y1x2)(x3 - x4) - (x1 - x2)(x3y4 - y3x4)
- // py = (x1y2 - y1x2)(y3 - y4) - (y1 - y2)(x3y4 - y3x4)
- // d = (x1 - x2)(y3 - y4) - (y1 - y2)(x3 - x4) = 0 if lines are parallel
- // Intersection is (px / d, py / d)
-
- Vector v1(px / d, py / d);
-
-// Vector normal = Vector::Normal(p1, p2);
- p4 = endpoint + normal;
-
- // Find the intersection of the line and endpoint + normal to the line
- px = (((p1.x * p2.y) - (p1.y * p2.x)) * (endpoint.x - p4.x))
- - ((p1.x - p2.x) * ((endpoint.x * p4.y) - (endpoint.y * p4.x)));
- py = (((p1.x * p2.y) - (p1.y * p2.x)) * (endpoint.y - p4.y))
- - ((p1.y - p2.y) * ((endpoint.x * p4.y) - (endpoint.y * p4.x)));
- d = ((p1.x - p2.x) * (endpoint.y - p4.y))
- - ((p1.y - p2.y) * (endpoint.x - p4.x));
+ position = l1;
+ endpoint = l2;
+}
- Vector v2(px / d, py / d);
-#if 0
- Vector v3 = position - v1;
- Vector v4 = endpoint - v2;
+/*virtual*/ void Line::Save(void)
+{
+ Object::Save();
+ oldEndpoint = endpoint;
+}
- Vector v5 = v1 + -v3;
- Vector v6 = v2 + -v4;
-#else
- Vector v5 = v1 + v1 - position;
- Vector v6 = v2 + v2 - endpoint;
-#endif
- return new Line(v5, v6);
-#endif
+/*virtual*/ void Line::Restore(void)
+{
+ Object::Restore();
+ endpoint = oldEndpoint;
}