C++图形化坐标图

功能

  1. 绘制坐标轴、画坐标点、画线段
  2. 设置颜色、线宽度
  3. 坐标点标注数字

示例演示

在这里插入图片描述
示例源码

#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();
}

猜你喜欢

转载自blog.csdn.net/The_Only_God/article/details/106341393
今日推荐