#include "library.h"
struct point
{ double x, y; };
void print(point p)
{ print("(");
print(p.x);
print(",");
print(p.y);
print(")"); }
double distance(point a, point b)
{ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); }
point rotate(point p, double angle)
{ double r=sqrt(p.x*p.x+p.y*p.y);
double theta=atan2(p.x, p.y);
theta=theta+angle;
point q;
q.x=r*sin(theta);
q.y=r*cos(theta);
return q; }
point scale(point p, double factor)
{ point q;
q.x=p.x*factor;
q.y=p.y*factor;
return q; }
struct triangle
{ point p1, p2, p3; };
void print(triangle t)
{ print("<");
print(t.p1);
print(",");
print(t.p2);
print(",");
print(t.p3);
print(">"); }
triangle rotate(triangle t, double angle)
{ point a=rotate(t.p1, angle);
point b=rotate(t.p2, angle);
point c=rotate(t.p3, angle);
triangle r;
r.p1=a;
r.p2=b;
r.p3=c;
return r; }
triangle scale(triangle t, double factor)
{ point a=scale(t.p1, factor);
point b=scale(t.p2, factor);
point c=scale(t.p3, factor);
triangle r;
r.p1=a;
r.p2=b;
r.p3=c;
return r; }
double area(triangle t)
{ double a=t.p1.x*t.p2.y + t.p2.x*t.p3.y + t.p3.x*t.p1.y;
double b=t.p1.y*t.p2.x + t.p2.y*t.p3.x + t.p3.y*t.p1.x;
if (a>b)
return (a-b)/2;
else
return (b-a)/2; }
void draw(triangle t)
{ MoveTo(t.p1.x, t.p1.y);
DrawLineTo(t.p2.x, t.p2.y);
DrawLineTo(t.p3.x, t.p3.y);
DrawLineTo(t.p1.x, t.p1.y); }
void main(void)
{ triangle T = { {100,100}, {100,500}, {300,500} };
cout << "area of trinagle is " << area(T) << "\n";
triangle U = rotate(T, 0.7); // remember it's radians
cout << "area after rotation is " << area(U) << "\n";
triangle V = scale(U, 0.5);
cout << "area after scaling is " << area(V) << "\n";
triangle W = rotate(V, -0.7);
cout << "area after rotating back is " << area(W) << "\n";
MakeWindow(600, 600);
PenWidth(3);
PenColor(PEN_RED);
draw(T);
PenColor(PEN_GREEN);
draw(U);
PenColor(PEN_BLUE);
draw(V);
PenColor(PEN_ORANGE);
draw(W); }