D3ROTATE

in in in

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&#91;8&#93;;
void drwcube(void);
void main(void)
{
int vmode,i,dummy;
ProjParameters proj;
D3Point rcube&#91;8&#93;;
D3Point cube&#91;8&#93; = { { 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&#91;j&#93;.x,plot&#91;j&#93;.y,plot&#91;j+1&#93;.x,plot&#91;j+1&#93;.y);
drwline(2,10,plot&#91;3&#93;.x,plot&#91;3&#93;.y,plot&#91;0&#93;.x,plot&#91;0&#93;.y);
for(j=4;j<=6;j++)
drwline(2,10,plot&#91;j&#93;.x,plot&#91;j&#93;.y,plot&#91;j+1&#93;.x,plot&#91;j+1&#93;.y);
drwline(2,10,plot&#91;7&#93;.x,plot&#91;7&#93;.y,plot&#91;4&#93;.x,plot&#91;4&#93;.y);
for(j=0;j<=3;j++)
drwline(2,10,plot&#91;j&#93;.x,plot&#91;j&#93;.y,plot&#91;j+4&#93;.x,plot&#91;j+4&#93;.y);
return;
}

熱門詞條

聯絡我們