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.
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;}/* ------------------------------------ *//* ------------------------------------ */
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;}/* ------------------------------------ *//* ------------------------------------ */
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;}/* ------------------------------------ *//* ------------------------------------ */
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;}/* ------------------------------------ *//* ------------------------------------ */
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;}/* ------------------------------------ *//* ------------------------------------ */
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;}/* ------------------------------------ *//* ------------------------------------ */
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;}/* ------------------------------------ *//* ------------------------------------ */
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;}/* ------------------------------------ *//* ------------------------------------ */
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;}/* ------------------------------------ *//* ------------------------------------ */
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;}/* ------------------------------------ *//* ------------------------------------ */
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;}/* ------------------------------------ *//* ------------------------------------ */
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.