SimpleCG绘图函数(2)--直线

本篇继续介绍绘图函数,线段同样是非常重要的绘图函数.一共有三种方式绘制一条线条,如下所示:

画线条

//从坐标(nStartX, nStartY)到(nEndX, nEndY)以当前线颜色绘制一条直线段
void line( int nStartX, int nStartY, int nEndX, int nEndY );
 
//从当前隐含坐标到(nEndX, nEndY)以当前线颜色绘制一条直线段
void lineto( int nEndX, int nEndY );
 
//从当前隐含坐标往X方向的nEndX单位, Y方向的nEndY单位的位置,以当前线颜色绘制一条直线段
void linerel(int nDeltaX,int nDeltay);

从坐标(nStartX, nStartY)到(nEndX, nEndY)以当前线颜色绘制一条直线段,这个很好理解,就是以起点到终点绘制一条线条,其中线条包含起点,但不包含终点,当前颜色可以通过void setlinecolor(COLORREF nColor)指定.

另外两个函数提到隐含坐标,是设备内部坐标,每次绘制线条后,将设置终点为设备的隐含坐标点,可作为下一次绘制的起点.

下面我们通过一个简单的示例代码演示线条在绘制中的实际运用.该程序用动态的有规律的点绘制看似凌乱的线条,展现出微妙的动态变化.

// Lines.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "../import/include/CGBoard.h"
#include "math.h"

#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MD.lib")
#endif

#define LEVEL_CNT 4
#define POINT_CNT 12
#define LINE_LENGTH 60

int g_nWidth = 600;		//画面宽度
int g_nHeight= 600;		//画面高度

POINT g_ptCenter = {300,300};
POINT g_ptStart[LEVEL_CNT];
float g_fCurRatio[LEVEL_CNT] = {0.0f, 0.0f, 0.0f, 0.0f};
float g_fSpeed[LEVEL_CNT] = {0.005f, 0.01f, 0.015f, 0.02f};
void DrawProcess()
{
	int i=0;
	int j=0;
	bool bIsRunning = true;
	COLORREF nColor=0;
	float fAddRatio = 2 * C_PI / POINT_CNT;
	while(bIsRunning)
	{
		setfillcolor(0xFFFFFF);
		_fillrectangle(0,0,g_nWidth,g_nHeight);

		for( i=0; i<=POINT_CNT; ++i )
		{
			
			for( j=1; j<LEVEL_CNT; ++j )
			{
				POINT pt1;
				POINT pt2;
				pt1.x = LINE_LENGTH * (j) * sin(g_fCurRatio[j-1] + fAddRatio * i ) + g_ptCenter.x;
				pt1.y = LINE_LENGTH * (j) * cos(g_fCurRatio[j-1] + fAddRatio * i ) + g_ptCenter.y;
				pt2.x = LINE_LENGTH * (j+1) * sin(g_fCurRatio[j] + fAddRatio * i ) + g_ptCenter.x;
				pt2.y = LINE_LENGTH * (j+1) * cos(g_fCurRatio[j] + fAddRatio * i ) + g_ptCenter.y;

				//绘制线条,加下划线不立即更新画面
				_line(pt1.x,pt1.y,pt2.x,pt2.y);
			}
		}

		ReflushWindow();
		Sleep(100);
		
		for( i=0; i<LEVEL_CNT; ++i )
		{
			g_fCurRatio[i] += g_fSpeed[i];
		}
	}

}
int _tmain(int argc, _TCHAR* argv[])
{
	//初始化
	if( !ShowingBoard(g_nWidth,g_nHeight, DrawProcess))
		return 1;
	//关闭图库
	CloseBoard();
	return 0;
}

运行界面

通过以不同速度移动各个圈层的点,达到线条的动态变化,通过该程序,我们看到简单的线条就能产生奇妙的图形.

代码可在以下地址获取:

b2b160 / SimpleCG_Demo · GitCode

下一篇将会讲述矩形 的绘制以及简单示例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

b2b160

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值