Installer et compiler ces fichiers c dans votre répertoire de travail.
Vous trouverez le code source et le fichier graphique correspondant à chaque transformation.
L'étude des matrices de transformation fait partie d'un cours de mathématiques et sort du cadre de ce livre.
Reflection about the x-axis
ckd01.c
/* ------------------------------------ *//* Save as : ckd01.c *//* ------------------------------------ */#include"v_a.h"#include"dstrct.h"#include"dg_uv.h"/* ------------------------------------ */intmain(void){doublet[R2*C2]={1,0,0,-1};doubleu[R2*C5]={1,2,2,1,1,1,1,2,2,1};double**U=ca_A_mR(u,i_mR(R2,C5));double**T=ca_A_mR(t,i_mR(R2,C2));double**V=i_mR(R2,C5);clrscrn();printf("\n Reflection about the x-axis : \n");printf("\n | 1 0 | ");printf("\n v = | | u ");printf("\n | 0 -1 | \n\n");printf(" U: ");p_mR(U,S5,P0,C6);mul_mR(T,U,V);printf(" V: ");p_mR(V,S5,P0,C6);G_points2D_mR(i_WGnuplot(-3,3,-3,3),U,V);f_mR(U);f_mR(V);f_mR(T);stop();return0;}/* ------------------------------------ *//* ------------------------------------ */
Reflection about the y-axis
ckd02.c
/* ------------------------------------ *//* Save as : ckd02.c *//* ------------------------------------ */#include"v_a.h"#include"dstrct.h"#include"dg_uv.h"/* ------------------------------------ */intmain(void){doublet[R2*C2]={-1,0,0,1};doubleu[R2*C5]={1,2,2,1,1,1,1,2,2,1};double**U=ca_A_mR(u,i_mR(R2,C5));double**T=ca_A_mR(t,i_mR(R2,C2));double**V=i_mR(R2,C5);clrscrn();printf("\n Reflection about the y-axis : \n");printf("\n | -1 0 | ");printf("\n v = | | u ");printf("\n | 0 1 | \n\n");printf(" U: ");p_mR(U,S5,P0,C6);mul_mR(T,U,V);printf(" V: ");p_mR(V,S5,P0,C6);G_points2D_mR(i_WGnuplot(-3,3,-3,3),U,V);f_mR(U);f_mR(V);f_mR(T);stop();return0;}/* ------------------------------------ *//* ------------------------------------ */
Reflection about the line y = x
ckd03.c reflexion
/* ------------------------------------ *//* Save as : ckd03.c *//* ------------------------------------ */#include"v_a.h"#include"dstrct.h"#include"dg_uv.h"/* ------------------------------------ */intmain(void){doublet[R2*C2]={0,1,1,0};doubleu[R2*C5]={1,1,-1,-1,1,2,3,3,2,2};double**U=ca_A_mR(u,i_mR(R2,C5));double**T=ca_A_mR(t,i_mR(R2,C2));double**V=i_mR(R2,C5);clrscrn();printf("\n Reflection about the line y = x : \n");printf("\n | 0 1 | ");printf("\n v = | | u ");printf("\n | 1 0 | \n\n");printf(" U: ");p_mR(U,S5,P0,C6);mul_mR(T,U,V);printf(" V: ");p_mR(V,S5,P0,C6);G_points2D_mR(i_WGnuplot(-5,5,-5,5),U,V);f_mR(U);f_mR(V);f_mR(T);stop();return0;}/* ------------------------------------ *//* ------------------------------------ */
Orthogonal projection on the x-axis
ckd04.c
/* ------------------------------------ *//* Save as : ckd04.c *//* ------------------------------------ */#include"v_a.h"#include"dstrct.h"#include"dg_uv.h"/* ------------------------------------ */intmain(void){doublet[R2*C2]={1,0,0,0};doubleu[R2*C5]={1,2,2,1,1,1,1,2,2,1};double**U=ca_A_mR(u,i_mR(R2,C5));double**T=ca_A_mR(t,i_mR(R2,C2));double**V=i_mR(R2,C5);clrscrn();printf("\n Orthogonal projection on the x-axis : \n");printf("\n | 1 0 | ");printf("\n v = | | u ");printf("\n | 0 0 | \n\n");printf(" U: ");p_mR(U,S5,P0,C6);mul_mR(T,U,V);printf(" V: ");p_mR(V,S5,P0,C6);G_points2D_mR(i_WGnuplot(-.5,2.5,-.5,2.5),U,V);f_mR(U);f_mR(V);f_mR(T);stop();return0;}/* ------------------------------------ *//* ------------------------------------ */
Orthogonal projection on the y-axis
ckd05.c
/* ------------------------------------ *//* Save as : ckd05.c *//* ------------------------------------ */#include"v_a.h"#include"dstrct.h"#include"dg_uv.h"/* ------------------------------------ */intmain(void){doublet[R2*C2]={0,0,0,1};doubleu[R2*C5]={1,2,2,1,1,1,1,2,2,1};double**U=ca_A_mR(u,i_mR(R2,C5));double**T=ca_A_mR(t,i_mR(R2,C2));double**V=i_mR(R2,C5);clrscrn();printf("\n Orthogonal projection on the y-axis : \n");printf("\n | 0 0 | ");printf("\n v = | | u ");printf("\n | 0 1 | \n\n");printf(" U: ");p_mR(U,S5,P0,C6);mul_mR(T,U,V);printf(" V: ");p_mR(V,S5,P0,C6);G_points2D_mR(i_WGnuplot(-1,3,-1,3),U,V);f_mR(U);f_mR(V);f_mR(T);stop();return0;}/* ------------------------------------ *//* ------------------------------------ */
Dilatation
ckd06.c
/* ------------------------------------ *//* Save as : ckd06.c *//* ------------------------------------ */#include"v_a.h"#include"dstrct.h"#include"dg_uv.h"/* ------------------------------------ */intmain(void){doublet[R2*C2]={2,0,0,2};doubleu[R2*C5]={0,1,1,0,0,0,0,1,1,0};double**U=ca_A_mR(u,i_mR(R2,C5));double**T=ca_A_mR(t,i_mR(R2,C2));double**V=i_mR(R2,C5);clrscrn();printf("\n Dilation : \n");printf("\n | 2 0 | ");printf("\n v = | | u ");printf("\n | 0 2 | \n\n");printf(" U: ");p_mR(U,S5,P0,C6);mul_mR(T,U,V);printf(" V: ");p_mR(V,S5,P0,C6);G_points2D_mR(i_WGnuplot(-1,3,-1,3),U,V);f_mR(U);f_mR(V);f_mR(T);stop();return0;}/* ------------------------------------ *//* ------------------------------------ */
Contraction
ckd07.c
/* ------------------------------------ *//* Save as : ckd07.c *//* ------------------------------------ */#include"v_a.h"#include"dstrct.h"#include"dg_uv.h"/* ------------------------------------ */intmain(void){doublet[R2*C2]={.5,0,0,.5};doubleu[R2*C5]={0,1,1,0,0,0,0,1,1,0};double**U=ca_A_mR(u,i_mR(R2,C5));double**T=ca_A_mR(t,i_mR(R2,C2));double**V=i_mR(R2,C5);clrscrn();printf("\n Contraction : \n");printf("\n | .5 0 | ");printf("\n v = | | u ");printf("\n | 0 .5 | \n\n");printf(" U: ");p_mR(U,S5,P0,C6);mul_mR(T,U,V);printf(" V: ");p_mR(V,S5,P3,C6);G_points2D_mR(i_WGnuplot(-.5,1.5,-.5,1.5),U,V);f_mR(U);f_mR(V);f_mR(T);stop();return0;}/* ------------------------------------ *//* ------------------------------------ */
Shear in the x-direction with factor k (right)
ckd08.c
/* ------------------------------------ *//* Save as : ckd08.c *//* ------------------------------------ */#include"v_a.h"#include"dstrct.h"#include"dg_uv.h"/* ------------------------------------ */intmain(void){doublet[R2*C2]={1,2,0,1};doubleu[R2*C5]={0,1,1,0,0,0,0,1,1,0};double**U=ca_A_mR(u,i_mR(R2,C5));double**T=ca_A_mR(t,i_mR(R2,C2));double**V=i_mR(R2,C5);clrscrn();printf("\n Shear in the x-direction with factor k (right):\n");printf("\n | 1 2 | ");printf("\n v = | | u ");printf("\n | 0 1 | \n");printf(" U: ");p_mR(U,S5,P0,C6);mul_mR(T,U,V);printf(" V: ");p_mR(V,S5,P3,C6);G_points2D_mR(i_WGnuplot(-.5,3.5,-.5,3.5),U,V);f_mR(U);f_mR(V);f_mR(T);stop();return0;}/* ------------------------------------ *//* ------------------------------------ */
Shear in the x-direction with factor k (left)
ckd09.c
/* ------------------------------------ *//* Save as : ckd09.c *//* ------------------------------------ */#include"v_a.h"#include"dstrct.h"#include"dg_uv.h"/* ------------------------------------ */intmain(void){doublet[R2*C2]={1,-2,0,1};doubleu[R2*C5]={0,1,1,0,0,0,0,1,1,0};double**U=ca_A_mR(u,i_mR(R2,C5));double**T=ca_A_mR(t,i_mR(R2,C2));double**V=i_mR(R2,C5);clrscrn();printf("\n Shear in the x-direction with factor k (left) :\n");printf("\n | 1 -2 | ");printf("\n v[n] = | | u[n] ");printf("\n | 0 1 | \n");printf(" U: ");p_mR(U,S5,P0,C6);mul_mR(T,U,V);printf(" V: ");p_mR(V,S5,P3,C6);G_points2D_mR(i_WGnuplot(-2.5,1.5,-1.5,2.5),U,V);f_mR(U);f_mR(V);f_mR(T);stop();return0;}/* ------------------------------------ *//* ------------------------------------ */
Shear in the y-direction with factor k (up)
ckd10.c
/* ------------------------------------ *//* Save as : ckd10.c *//* ------------------------------------ */#include"v_a.h"#include"dstrct.h"#include"dg_uv.h"/* ------------------------------------ */intmain(void){doublet[R2*C2]={1,0,2,1};doubleu[R2*C5]={0,1,1,0,0,0,0,1,1,0};double**U=ca_A_mR(u,i_mR(R2,C5));double**T=ca_A_mR(t,i_mR(R2,C2));double**V=i_mR(R2,C5);clrscrn();printf("\n Shear in the y-direction with factor k (up) : \n");printf("\n | 1 0 | ");printf("\n v = | | u ");printf("\n | 2 1 | \n");printf(" U: ");p_mR(U,S5,P0,C6);mul_mR(T,U,V);printf(" V: ");p_mR(V,S5,P3,C6);G_points2D_mR(i_WGnuplot(-.5,3.4,-.5,3.5),U,V);f_mR(U);f_mR(V);f_mR(T);stop();return0;}/* ------------------------------------ *//* ------------------------------------ */
Shear in the x-direction with factor k (down)
ckd11.c
/* ------------------------------------ *//* Save as : ckd11.c *//* ------------------------------------ */#include"v_a.h"#include"dstrct.h"#include"dg_uv.h"/* ------------------------------------ */intmain(void){doublet[R2*C2]={1,0,-2,1};doubleu[R2*C5]={0,1,1,0,0,0,0,1,1,0};double**U=ca_A_mR(u,i_mR(R2,C5));double**T=ca_A_mR(t,i_mR(R2,C2));double**V=i_mR(R2,C5);clrscrn();printf("\n Shear in the x-direction with factor k (down): \n");printf("\n | 1 0 | ");printf("\n v = | | u ");printf("\n | -2 1 | \n");printf(" U: ");p_mR(U,S5,P0,C6);mul_mR(T,U,V);printf(" V: ");p_mR(V,S5,P3,C6);G_points2D_mR(i_WGnuplot(-2,2,-2.5,1.5),U,V);f_mR(U);f_mR(V);f_mR(T);stop();return0;}/* ------------------------------------ *//* ------------------------------------ */
Rotation
Pour ce dernier exemple qui propose de visualiser plusieurs rotations successive voir dans l'introduction la partie sur gnuplot et l'animation. Il suffit de modifier la taille de la fenêtre avec la souris pour voir la nouvelle image apparaître.