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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章