帮我看看代码。图形转换的
让三角形绕指定坐标旋转的问题
/* WIN-TC BGI 图形编程模板 */
#include "Conio.h "
#include "graphics.h "
#include <math.h>
#define pi 3.1415927
#define closegr closegraph
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, " ");
}
int x0,x1,x2,y0,y1,y2,m,n,k,w;
int main(void)
{
initgr(); /* BGI初始化 */
/*----------------------------程序输入部分-----------------------------------*/
printf( "firstpoint x0,y0:\n ");
scanf( "%d,%d ",&x0,&y0);
printf( "lastpoint x1,y1:\n ");
scanf( "%d,%d ",&x1,&y1);
setcolor(2);
line(x0,y0,x1,y1);
printf( "lastpoint x1,y1:\n ");
scanf( "%d,%d ",&x2,&y2);
line(x1,y1,x2,y2);
line(x0,y0,x2,y2);
printf( "m,n,w:\n ");
scanf( "%d,%d,%d ",&m,&n,&w);
k=w*pi/180.0;
x0=(x0-m)*cos(k)-(y0-n)*sin(k)+m;
y0=(x0-m)*sin(k)+(y0-n)*cos(k)+n;
x1=(x1-m)*cos(k)-(y1-n)*sin(k)+m;
y1=(x1-m)*sin(k)+(y1-n)*cos(k)+n;
x2=(x2-m)*cos(k)-(y2-n)*sin(k)+m;
y2=(x2-m)*sin(k)+(y2-n)*cos(k)+n;
setcolor(4);
line(x0,y0,x1,y1);
line(x1,y1,x2,y2);
line(x0,y0,x2,y2);
getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
closegr(); /* 恢复TEXT屏幕模式 */
return 0;
}
我这程序运行后,三角形变形了,我想是坐标转换错了,大家帮忙看看,刚学,见笑
[解决办法]
如果你看过图形学基础理论中点的在三维空间绕坐标轴旋转的理论,就行容易做了,只需要给出旋转角度和要绕的坐标轴,就可以直接写出旋转矩阵,然后与坐标相乘就好了,最好把点坐标与矩阵相乘和矩阵与矩阵相乘分开在不同的函数中写,这样,即使出问题了也好找,也可以重复使用,矩阵可以用行稳定性先矩阵或者列优先矩阵,OpenGL就是用列优先矩阵。