本篇继续介绍绘图函数,线段同样是非常重要的绘图函数.一共有三种方式绘制一条线条,如下所示:
画线条
//从坐标(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
下一篇将会讲述矩形 的绘制以及简单示例。