功能
- 繪製座標軸、畫座標點、畫線段
- 設置顏色、線寬度
- 座標點標註數字
示例演示
示例源碼
#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();
}