J'ai le programme C++ suivant. Je dois faire pivoter un triangle autour d'un point à un certain angle dans le sens inverse des aiguilles d'une montre. J'y arrive en suivant le code. ma logique est que d'abord je saisis le point sur lequel la rotation se produit, l'angle de rotation, puis les coordonnées du triangle. après que j'ai appliqué la formule de matriceterminaison anormale du programme (rotation du triangle)
M(final coordinates)=M(translate triangle to original position)*M(Rotate triangle)*M(translate triangle to origin)*M(original coordinates)
où M se réfère à la matrice dans la formule ci-dessus. En multipliant cette matrice dans l'ordre inverse < - quelqu'un a obtenu le résultat. Mais quand j'exécute ce code, le programme mène à une terminaison anormale.
Mon code est:
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
#define pi 3.14159265
void rotation(float tx,float ty,float redi,float t[][3])
{
clrscr();
int g=DETECT,gm;
initgraph(&g,&gm,"C:\\TC\\BGI");
setbkcolor(8);
int i,j,k;
float x[3][3],c[3][3],r[3][3],mf[3][3],res[3][3];
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
if(j==k)
{
r[j][k]=1;
x[j][k]=1;
}
else
{
r[j][k]=0;
x[j][k]=0;
}
}
}
float co,si;
co=cos(redi);
si=sin(redi);
r[0][0]=co; r[0][1]=-si; r[1][0]=si; r[1][1]=co;
x[0][2]=-tx;
x[1][2]=-ty;
for(int mat=0;mat<3;mat++)
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(mat==0) c[i][j]=0;
if(mat==1) mf[i][j]=0;
if(mat==2) res[i][j]=0;
for(k=0;k<3;k++)
{
if(mat==0)
c[i][j]+=r[i][k]*x[k][j];
if(mat==1)
{
x[0][2]=tx;
x[1][2]=ty;
mf[i][j]+=x[i][k]*c[k][j];
}
if(mat==2)
res[i][j]+=mf[i][k]*t[k][j];
}
cout<<res[i][j];
}
}
}
line(res[0][0],res[1][0],res[0][1],res[1][1]);
line(t[0][0],t[1][0],t[0][1],t[1][1]);
line(res[0][2],res[1][2],res[0][1],res[1][1]);
line(t[0][2],t[1][2],t[0][1],t[1][1]);
line(res[0][2],res[1][2],res[0][0],res[1][0]);
line(t[0][2],t[1][2],t[0][0],t[1][0]);
for(i=0;i<3;i++)
{
putpixel(res[0][i],res[1][i],RED);
putpixel(t[0][i],t[1][i],RED);
}
closegraph();
getch();
}
void main()
{
clrscr();
float tx,ty,t[3][3];
float deg,redi;
cout<<"Rotation about point : ";
cin>>tx>>ty;
cout<<"Enter angle of rotation :";
cin>>deg;
for(int i=0;i<3;i++)
{
cout<<"Enter co-ordintes "<<i+1<<" of triangle: ";
for(int j=0;j<3;j++)
{
if(j==2)
t[j][i]=1;
else
cin>>t[j][i];
}
}
redi=(deg*pi)/180.0;
rotation(tx,ty,redi,t);
getch();
}
J'utilise TC++ IDE. s'il vous plaît aider ......
Qu'est-ce que dit débogueur? Une ligne spécifique où elle se bloque systématiquement? – NotAgain
ERREUR DE POINT FLOTTANT: DOMAINE TERMINAISON ABNORMALE – AmanS