基本介紹
- 外文名:D3ROTATE
- 類型:程式語言
- 相關:DOS SVGACC圖形開發庫函式
- 套用範圍:圖形開發
名稱,簡介,
名稱
DOS SVGACC圖形開發庫函式
簡介
原型 extern void far d3rotate (int points, int xorigin, int yorigin, int zorigin, int zrang, int yrang, int xrang,D3Point far *inary, D3Point far *outary)
輸入 numpoints - 被旋轉點的個數
xorigin, yorigin, zorigin - 旋轉中心
zrang - 繞Z軸的旋轉角
yrang - 繞Y軸的旋轉角
xrang - 繞X軸的旋轉角
inary - 指向包含待旋轉點數組的D3Point的指針
輸出 無返回值
outary - 指向包含旋轉後點數組的D3Point的指針
用法 D3ROTATE提取inary中的三維點按照xorigin,yorigin,zorigin旋轉指定的角度。結果通過outary返回,outary可與inary共用一個空間。一個虛的坐標系放置在旋轉中心,旋轉參照這些坐標軸進行。正的角度使得從X軸正向向Y軸正向旋轉。此函式假定outary已合適分配。
例子
/*
* shows d3rotate works
*/
#include <stdlib.h>
#include <conio.h>
#include "svgacc.h"
D2Point plot[8];
void drwcube(void);
void main(void)
{
int vmode,i,dummy;
ProjParameters proj;
D3Point rcube[8];
D3Point cube[8] = { { 100,-100, 100},
{ 100,-100,-100},
{ 100, 100,-100},
{ 100, 100, 100},
{-100,-100, 100},
{-100,-100,-100},
{-100, 100,-100},
{-100, 100, 100}};
vmode = videomodeget();
if (!whichvga() || (whichmem() < 512))
exit(1);
res640();
proj.eyex = -1040;
proj.eyey = -600;
proj.eyez = -1200;
proj.scrd = 1700;
proj.theta = 30;
proj.phi = 45;
for(i=0;i<=360;i+=2)
{
d3rotate(8,0,0,0,i,i,i,cube,rcube);
dummy = d3project(8,&proj,rcube,plot);
drwcube();
sdelay(2);
drwcube();
}
drwcube();
getch();
videomodeset(vmode);
}
void drwcube(void)
{
int j;
for(j=0;j<=2;j++)
drwline(2,10,plot[j].x,plot[j].y,plot[j+1].x,plot[j+1].y);
drwline(2,10,plot[3].x,plot[3].y,plot[0].x,plot[0].y);
for(j=4;j<=6;j++)
drwline(2,10,plot[j].x,plot[j].y,plot[j+1].x,plot[j+1].y);
drwline(2,10,plot[7].x,plot[7].y,plot[4].x,plot[4].y);
for(j=0;j<=3;j++)
drwline(2,10,plot[j].x,plot[j].y,plot[j+4].x,plot[j+4].y);
return;
}