?? no.16.c
字號(hào):
/* WIN-TC BGI 圖形編程模板 */
#include "Conio.h"
#include "graphics.h"
#define closegr closegraph
#include "Math.h"
#define XC 800
#define YC 600
#define ZC 2000
typedef int vector[3];
int x_prj(vector v)
{
int xp;
xp=XC+(v[0]-XC)*(float)(ZC)/(float)(ZC-v[2])+0.5;
return(xp);
}
int y_prj(vector v)
{
int yp;
yp=YC+(v[1]-YC)*(float)(ZC)/(float)(ZC-v[2])+0.5;
return(yp);
}
void prj_line(vector v1, vector v2)
{
int xp1,xp2,yp1,yp2;
xp1=x_prj(v1);
xp2=x_prj(v2);
yp1=y_prj(v1);
yp2=y_prj(v2);
line(xp1+319,239-yp1,xp2+319,239-yp2);
}
void func1(vector v1, float u, float v, int times)
{
v1[0] = times * 2 * cos(u);
v1[1] = times * 2 * sin(u);
v1[2] = times * 3 * u;
}
void func2(vector v1, float u, float v, int times)
{
v1[0] = times * ( 3 + 2 * u + v );
v1[1] = times * ( 4 + u - v );
v1[2] = times * ( 1 - u + v );
}
void copy(vector v1, vector v2)
{
v1[0] = v2[0];
v1[1] = v2[1];
v1[2] = v2[2];
}
void curveline(float a, float b, void (*func)(vector, float, float, int),
int color, int times, float precision)
{
float i;
vector v1, v2;
setcolor(color);
func(v2, a, 0, times);
for (i = a + precision; i < b; i = i + precision) {
copy(v1, v2);
func(v2, i, 0, times);
prj_line(v1, v2);
}
}
void curveSurface(float a, float b, float c, float d, void (*func)(vector, float, float, int),
float* u, float* v, int nu, int nv, int color, int times, float precision)
{
float i, j, k;
vector v1, v2;
setcolor(color);
for (i = 0; i < nu; i++) {
func(v2, u[i], c, times);
for (j = c + precision; j < d; j = j + precision) {
copy(v1, v2);
func(v2, u[i], j, times);
prj_line(v1, v2);
}
}
for (i = 0; i < nv; i++) {
func(v2, a, v[i], times);
for (j = a + precision; j < b; j = j + precision) {
copy(v1, v2);
func(v2, j, v[i], times);
prj_line(v1, v2);
}
}
}
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同樣效果 */
registerbgidriver(EGAVGA_driver);/* 注冊(cè)BGI驅(qū)動(dòng)后可以不需要.BGI文件的支持運(yùn)行 */
initgraph(&gd, &gm, "");
}
int main(void)
{
float u[11] = {0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0};
float v[6] = {1.0, 1.4, 1.8, 2.2, 2.6, 3.0};
initgr(); /* BGI初始化 */
curveline(0, 4 * 3.14, func1, 12, 10, 0.01);
curveSurface(0, 2, 1, 3, func2, u, v, 11, 6, 15, 30, 0.01);
getch(); /* 暫停一下,看看前面繪圖代碼的運(yùn)行結(jié)果 */
closegr(); /* 恢復(fù)TEXT屏幕模式 */
return 0;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -