#include #include #include "point.h" #include "vector_fancyT.h" using namespace std; fancy_triangle::fancy_triangle() :triangle(), my_color(0) { } fancy_triangle::fancy_triangle(point p1, point p2, point p3) :triangle(p1,p2,p3), my_color(0) { } void fancy_triangle::set_color(int color) { my_color=color; } void fancy_triangle::shift(vector v) { triangle::shift(point(v.x(),v.y())); } fancy_triangle fancy_triangle::rotate(double theta) // use default center { point C = center(); point pp1 = rotate_oneP(theta, p1(), C); point pp2 = rotate_oneP(theta, p2(), C); point pp3 = rotate_oneP(theta, p3(), C); return fancy_triangle(pp1,pp2,pp3); } fancy_triangle fancy_triangle::rotate(double theta, point C) // use c as center; { point pp1 = rotate_oneP(theta, p1(), C); point pp2 = rotate_oneP(theta, p2(), C); point pp3 = rotate_oneP(theta, p3(), C); return fancy_triangle(pp1,pp2,pp3); } point fancy_triangle::rotate_oneP(double theta, point P, point C) { double x = P.x() - C.x(); double y = P.y() - C.y(); double r = P.distance(C); double beta; if ( x<= 0.0000001 && x >= -0.0000001) beta=3.1415926/2; else beta = atan(y/x); if (x < -0.0000001) beta = beta+3.1415926; beta -= theta; x = r*cos(beta); y = r*sin(beta); return point(x+C.x(),y+C.y()); } vector::vector() :point(0,0) { } vector::vector(double x, double y) :point(x,y) { } double vector::length() const { return distance(point(0,0)); } double vector::x() const { return (point::x()); } double vector::y() const { return (point::y()); } void vector::print_vector() { cout << "(" << x() << "," << y() << ")"; }