首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮小弟我看看代码。图形转换的

2012-02-09 
帮我看看代码。图形转换的让三角形绕指定坐标旋转的问题/*WIN-TCBGI图形编程模板*/#includeConio.h #incl

帮我看看代码。图形转换的
让三角形绕指定坐标旋转的问题

/*   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就是用列优先矩阵。

热点排行