Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- f(x) == f(a)(1-t)+f(b)*t
- t == (x-a)/(b-a)
- // **************************************************
- // ***** TD Question 1
- // **************************************************
- struct Complex
- {
- float x,y;
- };
- // **************************************************
- // ***** TD Question 2
- // **************************************************
- Complex make_complex(float r, float i)
- {
- Complex c;
- c.x = r;
- c.y = i;
- return c;
- }
- Complex make_complex_expo(float r, float theta)
- {
- Complex c;
- c.x = r*cos(theta);
- c.y = r*sin(theta);
- return c;
- }
- // **************************************************
- // ***** TD Question 3
- // **************************************************
- Complex operator+(Complex a, Complex b)
- {
- Complex c = { a.x+b.x, a.y+b.y };
- return c;
- }
- Complex operator-(Complex a, Complex b)
- {
- Complex c = { a.x-b.x, a.y-b.y };
- return c;
- }
- Complex translate(Complex p, float dx, float dy)
- {
- return p + make_complex(dx,dy);
- }
- // **************************************************
- // ***** TD Question 4
- // **************************************************
- //A( 1,-1) = 1 -1.i = 1-i
- //B( 0, 1) = 0 +1.i = i
- //C(-1,-1) = -1 -1.i = -1-i
- //
- //lambda=2
- //A' = lambda * A = 2*(1-i) = 2-2i = (2,-2)
- //B' = lambda * B = 2*i = (0, 2)
- //C' = lambda * C = 2*(-1-i) = -2-2i = (-2,-2)
- // ==> faire le dessin
- //
- //lambda=0.5
- //A' = lambda * A = (0.5, -0.5)
- //B' = lambda * B = (0, 0.5)
- //C' = lambda * C = (-0.5, -0.5)
- // ==> faire le dessin
- //
- // Multiplication d'un complexe par un réel = une homothétie de centre O = approche (lambda<1) ou éloigne (lambda>1) le point
- // **************************************************
- // ***** TD Question 5
- // **************************************************
- Complex operator*(float a, Complex b)
- {
- Complex c = { a*b.x, a*b.y };
- return c;
- }
- Complex operator/(Complex b, float d)
- {
- Complex c = { b.x/d, b.y/d };
- return c;
- }
- Complex scale(Complex p, float cx, float cy, float sc)
- {
- Complex tr = make_complex( cx, cy);
- return (sc*(p-tr))+tr;
- }
- // **************************************************
- // ***** TD Question 6 et 7
- // **************************************************
- // A( 1,-1) = 1 -1.i = 1-i
- // B( 0, 1) = 0 +1.i = i
- // C(-1,-1) = -1 -1.i = -1-i
- //
- // r = e^(i.theta) avec theta = PI/2 donc une rotation de 90°
- // r = cos(PI/2) + i.sin(PI/2) = 0+i = i
- //A' = r * A = i*(1-i) = 1+i = (1,1)
- //B' = r * B = i*i = -1 = (-1, 0)
- //C' = r * C = i*(-1-i) = 1-i = (1,-1)
- // ==> faire le dessin
- // ==> rotation de 90°
- //
- // ==> ca marche avec n'importe quel theta
- // par exemple avec theta=0 r= cos(0)+i.sin(0) = 1 => identite
- // par exemple avec theta=PI r= cos(PI)+i.sin(PI) = -1
- //
- // Multiplié un complexe par un complexe imaginaire pure (r=e^(i.theta) ==> rotation de theta°
- // **************************************************
- // ***** TD Question 8
- // **************************************************
- float to_degree(float rad)
- {
- return 180.f * rad/M_PI;
- }
- float to_rad(float deg)
- {
- return M_PI*deg/180.f;
- }
- Complex operator*(Complex a, Complex b)
- {
- Complex c = make_complex( a.x*b.x - a.y*b.y, a.x*b.y + a.y*b.x );
- return c;
- }
- Complex rotate(Complex p, float cx, float cy, float theta_deg)
- {
- Complex rot = make_complex_expo( 1, to_rad(theta_deg));
- Complex tr = make_complex( cx, cy);
- return ((p-tr)*rot)+tr;
- }
- float norm(Complex c)
- {
- return sqrt( c.x*c.x + c.y*c.y);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement