功能
- 绘制坐标轴、画坐标点、画线段
- 设置颜色、线宽度
- 坐标点标注数字
示例演示
示例源码
#include<stdio.h>
#include"graph.h"
int point[4][2] = { {1,9},{9,9},{5,5},{5,1} };
int main() {
Graph graph = Graph(800, 640);
graph.drawCoordinateAxis(10, 10, 1, 1);//结合窗口合理设置(´-﹏-`;)
graph.setPointColor(Graph::COLOR_RED);//设置点颜色
graph.setTextColor(Graph::COLOR_BLUE);//设置文本颜色
for (int i = 0; i < 4; i++) {
graph.drawPoint(point[i][0], point[i][1]);//画点
graph.drawNum(point[i][0], point[i][1], i+1);//写数字
}
//设置线格式
graph.setLineWidth(1);
graph.setLineColor(Graph::COLOR_GREEN);
//画线
graph.drawLine(point[0][0], point[0][1], point[2][0], point[2][1]);
graph.drawLine(point[1][0], point[1][1], point[2][0], point[2][1]);
graph.drawLine(point[3][0], point[3][1], point[2][0], point[2][1]);
graph.show();
}
类实现方法
借助C++的第三方函数库EasyX编写了一个函数绘制类Graph
第三方库下载链接:https://easyx.cn/downloads/
类源码
graph.h
#pragma once
class Graph
{
private:
int windowHigh, windowWidth, windowPadding;//窗口高、宽、边界厚度
int xScale, yScale;//比例尺
double baseLengthX, baseLengthY;
int lineWidth;//线宽
unsigned long int lineColor, textColor, pointColor;//线、文本、点颜色
public:
//颜色
static unsigned long int COLOR_BLUE;//蓝色
static unsigned long int COLOR_BLACK;//黑色
static unsigned long int COLOR_RED;//红色
static unsigned long int COLOR_GREEN;//绿色
/******
0 初始化类
******/
Graph(int windowWidth, int windowHigh); //创建一个画图窗口
void drawCoordinateAxis(int xLimit, int yLimit, int xStep, int yStep); //画坐标轴
void show();//显示图像
/******
1 画点类
******/
void drawPoint(int x, int y);//画点
void setPointColor(unsigned long int pointColor);//设置点颜色
/******
2 画线类
******/
void drawLine(int x1, int y1, int x2, int y2);//画线
void setLineWidth(int width);//设置线段宽度
void setLineColor(unsigned long int color);//设置线段颜色
/******
3 写字类
******/
void setTextColor(unsigned long int color);//设置文本颜色
void drawNum(int x, int y, int num);//写整数数字
};
graph.cpp
#include "graph.h"
#include<easyx.h>
#include<conio.h>
unsigned long int Graph::COLOR_BLUE = BLUE;
unsigned long int Graph::COLOR_BLACK = BLACK;
unsigned long int Graph::COLOR_RED = RED;
unsigned long int Graph::COLOR_GREEN = GREEN;
//初始化窗口
Graph::Graph(int windowWidth, int windowHigh) {
this->windowHigh = windowHigh;
this->windowWidth = windowWidth;
windowPadding = 50;
//直线默认属性
lineColor = BLACK;
textColor = BLACK;
lineWidth = 2;
initgraph(windowWidth, windowHigh);
setbkcolor(WHITE);
cleardevice();
}
//画坐标轴
void Graph::drawCoordinateAxis(int xLimit, int yLimit, int xStep, int yStep) {
xScale = (windowWidth - 2 * windowPadding) / xLimit;
yScale = (windowHigh - 2 * windowPadding) / yLimit;
baseLengthX = (windowWidth - 2 * windowPadding) / (xLimit / xStep);
baseLengthY = (windowHigh - 2 * windowPadding) / (yLimit / yStep);
setlinecolor(lineColor);
setlinestyle(PS_SOLID | PS_JOIN_BEVEL, lineWidth);
line(windowPadding, windowHigh - windowPadding, windowPadding + xLimit / xStep * baseLengthX, windowHigh - windowPadding);
line(windowPadding, windowHigh - windowPadding, windowPadding, windowHigh - (windowPadding + yLimit / yStep * baseLengthY));
settextcolor(BLACK);
drawNum(0, 0, 0);
int i;
for (i = xStep; i <= xLimit; i += xStep) {
TCHAR c[20];
_stprintf_s(c, _T("%d"), i);
outtextxy(windowPadding + i * xScale, windowHigh - (windowPadding - 10), c);
}
int w = 0, ww = yLimit;
while (ww) {
w++;
ww /= 10;
}
for (i = yStep; i <= yLimit; i += yStep) {
TCHAR c[20];
_stprintf_s(c, _T("%d"), i);
outtextxy(windowPadding - 10 * w, windowHigh - (windowPadding + i * yScale), c);
}
}
//画线
void Graph::setLineColor(unsigned long int color) {
setlinecolor(color);
}
void Graph::setLineWidth(int width) {
this->lineWidth = width;
setlinestyle(PS_SOLID | PS_JOIN_BEVEL, width);
}
void Graph::drawLine(int x1, int y1, int x2, int y2) {
line(windowPadding + x1 * xScale, windowHigh - (windowPadding + y1 * yScale), windowPadding + x2 * xScale, windowHigh - (windowPadding + y2 * yScale));
}
void setTextColor(int color) {
settextcolor(color);
}
//写数字
void Graph::setTextColor(COLORREF color) {
textColor = color;
settextcolor(color);
}
void Graph::drawNum(int x, int y, int num)
{
TCHAR c[20];
_stprintf_s(c, _T("%d"), num);
settextcolor(textColor);
outtextxy(windowPadding + x * xScale - 10, windowHigh - (windowPadding + y * yScale - 10), c);
}
//画点
void Graph::setPointColor(unsigned long int color) {
pointColor = color;
setfillcolor(color);
setlinecolor(color);
}
void Graph::drawPoint(int x, int y) {
setfillcolor(pointColor);
fillcircle(windowPadding + x * xScale, windowHigh - (windowPadding + y * yScale), 3);
}
void Graph::show() {
_getch();
}