⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 no.16.c

📁 中南大学C语言程序设计实习 1 实验一:C语言图形模式的设置 2 实习二:一元函数的图形绘制 3 实习三:二维图形的几何变换 4 实习四:非线性方程求根的二分法 5 实习五
💻 C
字号:
/* 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);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
  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(); /* 暂停一下,看看前面绘图代码的运行结果 */
  closegr(); /* 恢复TEXT屏幕模式 */
  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -