yw80

分享代码,一起学习进步~

[图形学] 画填充圆(基于 Bresenham 算法)

基于图形学中的 Bresenham 画圆法,设计了填充圆的实现。以下是该实现的 C 语言源码: /////////////////////////////////////////////////// // 程序名称:基于 Bresenham 算法画填充圆 // 编译环境:Visual C++ 6.0 / 2013,EasyX 20140321(beta) // 作  者:yangw80 <yw80@qq.com> // 最后修改:2014-7-14 // #include <graphics.h> #include <conio.h> // 基于 Bresenham 算法画填充圆 void FillCircle_Bresenham(int x, int y, int r, COLORREF color) { int tx = 0, ty = r, d = 3 - 2 * r, i; while( tx < ty) { // 画水平两点连线(<45度) for (i = x - ty; i <= x + ty; i+... [更多...]

计算任意扇形的最小外包矩形

今天很偶然需要这样一个东西: 求任意扇形的最小包围矩形,要求矩形的边是水平、垂直的。 这个东西看似很简单,但是仔细一想,需要注意的地方蛮多的,还真有点不好下手。再回想一下,好像没有那本书里面讲过。然后百度了一下,似乎也没找到有效的方法。于是我就花了点时间搞定了这个东西,然后顺手写了一个例子演示效果。 如果您有更好的方法,十分期待交流一下。 以下代码除了包含必要的求解任意扇形的最小包围函数之外,还加上了鼠标操作:按下左键移动鼠标,可以调整终止角的弧度;同时按下 Shift 键移动,可以调整起始角的弧度。 执行效果如图: 完整代码如下: /////////////////////////////////////////////////// // 程序名称:计算扇形的最小包围矩形 // 编译环境:Visual C++ 6.0 / 2010,EasyX 2013霜降版 // 作  者:yangw80 <yw80@qq.com> // 最后修改:2013-11-14 // #include <graphics.h> #include <math.h> #in... [更多...]

[图形学] 画圆(基于 Bresenham 算法)

图形学中的 Bresenham 画圆法,以下是该算法的 C 语言实现: /////////////////////////////////////////////////// // 程序名称:基于 Bresenham 算法画圆 // 编译环境:Visual C++ 6.0 / 2010,EasyX 2011惊蛰版 // 作  者:yangw80 <yw80@qq.com> // 最后修改:2011-5-3 // #include <graphics.h> #include <conio.h> // 使用 Bresenham 画圆法 void Circle_Bresenham(int x, int y, int r, int color) { int tx = 0, ty = r, d = 3 - 2 * r; while( tx <= ty) { // 利用圆的八分对称性画点 putpixel(x + tx, y + ty, color); putpixel(x + tx, y - ty, color); putpix... [更多...]

[图形学] 画圆(基于正负算法)

图形学中的正负画圆法,以下是该算法的 C 语言实现: /////////////////////////////////////////////////// // 程序名称:基于正负算法画圆 // 编译环境:Visual C++ 6.0 / 2010,EasyX 2011惊蛰版 // 作  者:yangw80 <yw80@qq.com> // 最后修改:2011-5-3 // #include <graphics.h> #include <conio.h> // 正负画圆法 void Circle_PN(int x, int y, int r, int color) { int tx = 0, ty = r, f = 0; while(tx <= ty) { // 利用圆的八分对称性画点 putpixel(x + tx, y + ty, color); putpixel(x + tx, y - ty, color); putpixel(x - tx, y + ty, color); putpixel(x - tx,... [更多...]

[图形学] 画圆(基于中点算法)

图形学中的中点画圆法,以下是该算法的 C 语言实现: /////////////////////////////////////////////////// // 程序名称:基于中点算法画圆 // 编译环境:Visual C++ 6.0 / 2010,EasyX 2011惊蛰版 // 作  者:yangw80 <yw80@qq.com> // 最后修改:2011-4-29 // #include <graphics.h> #include <conio.h> // 中点画圆法 void Circle_Midpoint(int x, int y, int r, int color) { int tx = 0, ty = r, d = 1 - r; while(tx <= ty) { // 利用圆的八分对称性画点 putpixel(x + tx, y + ty, color); putpixel(x + tx, y - ty, color); putpixel(x - tx, y + ty, color); putpi... [更多...]

[图形学] 画任意斜率的直线(基于 Bresenham 算法)

图形学中的 Bresenham 画直线算法,以下是该算法的 C 语言实现: /////////////////////////////////////////////////// // 程序名称:基于 Bresenham 算法画任意斜率的直线 // 编译环境:Visual C++ 6.0 / 2010,EasyX 2011惊蛰版 // 作  者:yangw80 <yw80@qq.com> // 最后修改:2011-4-26 // #include <graphics.h> #include <conio.h> // 使用 Bresenham 算法画任意斜率的直线(包括起始点,不包括终止点) void Line_Bresenham(int x1, int y1, int x2, int y2, int color) { int x = x1; int y = y1; int dx = abs(x2 - x1); int dy = abs(y2 - y1); int s1 = x2 > x1 ? 1 : -1; int s2 = y2... [更多...]

[图形学] 画任意斜率的直线(基于直线的中点算法)

图形学中的直线的中点算法,以下是该算法的 C 语言实现: /////////////////////////////////////////////////// // 程序名称:基于中点算法画任意斜率的直线 // 编译环境:Visual C++ 6.0 / 2010,EasyX 2011惊蛰版 // 作  者:yangw80 <yw80@qq.com> // 最后修改:2011-4-26 // #include <graphics.h> #include <conio.h> // 使用中点算法画任意斜率的直线(包括起始点,不包括终止点) void Line_Midpoint(int x1, int y1, int x2, int y2, int color) { int x = x1, y = y1; int a = y1 - y2, b = x2 - x1; int cx = (b >= 0 ? 1 : (b = -b, -1)); int cy = (a <= 0 ? 1 : (a = -a, -1)); putpixe... [更多...]

[图形学] 画任意斜率的直线(基于 DDA 算法)

图形学中的 DDA 画直线算法,以下是该算法的 C 语言实现: /////////////////////////////////////////////////// // 程序名称:基于 DDA 算法画任意斜率的直线 // 编译环境:Visual C++ 6.0 / 2010,EasyX 2011惊蛰版 // 作  者:yangw80 <yw80@qq.com> // 最后修改:2011-4-26 // #include <graphics.h> #include <conio.h> // 四舍五入 int Round(float x) { return (int)(x < 0 ? x - 0.5 : x + 0.5); } // 使用 DDA 算法画任意斜率的直线(包括起始点,不包括终止点) void Line_DDA(int x1, int y1, int x2, int y2, int color) { float x, y; // 当前坐标点 float cx, cy; // x、y 方向上的增量 int steps... [更多...]

[分形学] Julia Set (茱莉亚集) VC 源代码

关于 Julia Set (茱莉亚集) 的介绍什么的我就不多说了,网上一大堆。执行效果如图: 关于 Julia Set,可以通过设置复数 c 的初值,显示出不同的图案,比如,大家可以试试以下几组: c.re = 0.45, c.im = -0.1428;c.re = 0.285, c.im = 0.01;c.re = 0.285, c.im = 0;c.re = -0.8, c.im = 0.156;c.re = -0.835, c.im = -0.2321;c.re = -0.70176, c.im = -0.3842; 随便用哪行替换掉源程序中的“c.re = -0.75, c.im = 0;”就可以看到不同的图案了。循环变量 k 是迭代次数,在某些参数下需要高一些会更精细。为了美观,还需要修改一下颜色部分,目前代码中的颜色是这样的: HSLtoRGB((float)((k<<5) % 360), 1.0, 0.5)这行代码中的 k 的取值范围是 0~180,将其映射到 HSL 颜色空间中的色相上(360 度)。 全部 VC 源代码如下: //... [更多...]

[分形学] Mandelbrot Set (曼德布洛特集) VC 源代码

关于 Mandelbrot Set (曼德布洛特集) 的介绍什么的我就不多说了,网上一大堆。执行效果如图: 为了美观,可以修改一下颜色部分,目前代码中的颜色是这样的: HSLtoRGB((float)((k<<5) % 360), 1.0, 0.5) 这行代码中的 k 的取值范围是 0~180,将其映射到 HSL 颜色空间中的色相上(360 度)。 全部 VC 源代码如下: // 程序名称:分形学 - Mandelbrot Set (曼德布洛特集) // 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版 // 最后更新:2010-9-9 // #include <graphics.h> #include <conio.h> ///////////////////////////////////////////////// // 定义复数及乘、加运算 ///////////////////////////////////////////////// // 定义复数 struct COMPLEX { double re; do... [更多...]