X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fline.cpp;h=8425e62356e5062cee58b39a50da4793e0c11090;hb=a42277d4d950d32459b16b3ec8ee8287c9c0afab;hp=7085308f9fe12eb2e3687f3469e23fde2b2971fb;hpb=11cff81f10ccca1b31288fce04d696e715b922b0;p=architektonas diff --git a/src/line.cpp b/src/line.cpp index 7085308..8425e62 100644 --- a/src/line.cpp +++ b/src/line.cpp @@ -575,6 +575,57 @@ same reference number. } +/*virtual*/ Object * Line::Mirror(Vector p1, Vector p2) +{ +#if 0 + return NULL; + +double Vector::Parameter(Vector v1, Vector v2, Vector p) +{ + // Geometric interpretation: + // The parameterized point on the vector lineSegment is where the normal of + // the lineSegment to the point intersects lineSegment. If the pp < 0, then + // the perpendicular lies beyond the 1st endpoint. If pp > 1, then the + // perpendicular lies beyond the 2nd endpoint. + + Vector lineSegment = v2 - v1; + double magnitude = lineSegment.Magnitude(); + Vector pointSegment = p - v1; + double t = lineSegment.Dot(pointSegment) / (magnitude * magnitude); + return t; +} + + +// Return the normal to the linesegment formed by the passed in points. +// (Not sure which is head or tail, or which hand the normal lies) +/*static*/ Vector Vector::Normal(Vector v1, Vector v2) +#endif + + double t1 = Vector::Parameter(p1, p2, position); + double t2 = Vector::Parameter(p1, p2, endpoint); + + Vector unit = Vector(p1, p2).Unit(); + Vector v1 = unit * t1; + Vector v2 = unit * t2; + +// Vector normal = Vector::Normal(p1, p2); + // Get the points normal to position & endpoint to the line passed in + // (these are tails) + Vector v3 = p1 + v1; + Vector v4 = p1 + v2; + + // Make our mirrored vectors + Vector v5 = -(position - v3); + Vector v6 = -(endpoint - v4); + + // Find the points + Vector v7 = v3 + v5; + Vector v8 = v4 + v6; + + return new Line(v7, v8); +} + + void Line::SetDimensionOnLine(Dimension * dimension/*=NULL*/) { // If they don't pass one in, create it for the caller.