BestAns

路漫漫其修远兮,吾将上下而求索

VC绘图/游戏简易教程--5:数学知识在绘图中的运用 铜牌收录

教程总目录:https://codebus.cn/bestans/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)

[学习目标]

理解数学的重要性

  1. 最简单的,来个全屏的渐变色吧,是上一课的扩展。就是需要将 0~255 的颜色和 0~479 的 y 轴对应起来
    c 表示颜色,范围 0~255
    y 表示y轴,范围 0~479
    于是:
    c / 255 = y / 479
    c = y / 479 * 255 = y * 255 / 479 (先算乘法再算除法可以提高精度)

看代码:

#include <graphics.h>
#include <conio.h>

int main()
{
	initgraph(640, 480);

	int c;
	for(int y=0; y<480; y++)
	{
		c = y * 255 / 479;
		setlinecolor(RGB(0,0,c));
		line(0, y, 639, y);
	}

	_getch();
	closegraph();
	return 0;
}

试试效果吧。

  1. 画一个圆形的渐变色

首先,我们要用到圆形的基本公式:
x * x + y * y = r * r

让弧度从 0~2 * 3.14,然后需要根据弧度和半径算出 (x,y),
用 pi 表示圆周率
用 r 表示半径
用 a 表示弧度(小数)
用 c 表示颜色

于是:
x = r * cos(a)
y = r * sin(a)
c = a * 255 / (2 * pi)

看看代码:

#include <graphics.h>
#include <conio.h>
#include <math.h>

#define PI 3.14159265359

int main()
{
	initgraph(640, 480);

	int c;
	double a;
	int x, y, r = 200;
	for(a = 0; a < PI * 2; a += 0.0001)
	{
		x=(int)(r * cos(a) + 320 + 0.5);
		y=(int)(r * sin(a) + 240 + 0.5);
		c=(int)(a * 255 / (2 * PI) + 0.5);
		setlinecolor(RGB(c, 0, 0));
		line(320, 240, x, y);
	}

	_getch();
	closegraph();
	return 0;
}

[作业]

这次没什么作业,只是理解一下数学的重要性而已。如果读者还在念书,请重视数学。

评论 (4) -

  • 请问楼主,为什么要加0.5
    • double douN=100.6;
      int iN=(int)(douN+0.5);//对douN 四舍五入取整
  • 楼主,x,y坐标加了0.5后为什么图形就更充实了?而我在此基础上加1,就变疏了?半径变长的话不是应该变实吗?还是因为用加0.5再强制转换提高计算精度?
    • 加 1 再强制取整,并不是四舍五入。

添加评论