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();
}
  • 14
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
要在DevC++中实现图形化界面,你可以使用一个库来帮助你进行界面设计和交互。一个常用的库是WinAPI,它是Windows操作系统的应用程序编程接口。下面是一个简单的示例代码,展示了如何使用WinAPI创建一个简单的窗口: ```c #include <windows.h> // 窗口消息处理函数 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 注册窗口类 WNDCLASS wc = {0}; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = "MyWindowClass"; RegisterClass(&wc); // 创建窗口 HWND hwnd = CreateWindow( "MyWindowClass", // 窗口类名称 "My Window", // 窗口标题 WS_OVERLAPPEDWINDOW, // 窗口样式 CW_USEDEFAULT, // 初始X坐标 CW_USEDEFAULT, // 初始Y坐标 500, // 窗口宽度 400, // 窗口高度 NULL, // 父窗口句柄 NULL, // 菜单句柄 hInstance, // 实例句柄 NULL // 附加参数 ); // 显示窗口 ShowWindow(hwnd, nCmdShow); // 消息循环 MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } ``` 这段代码创建了一个名为"My Window"的窗口,并且注册了一个名为"MyWindowClass"的窗口类。然后,使用消息循环来处理窗口消息,直到接收到销毁窗口的消息为止。 在DevC++中,你可以将以上代码保存为一个.cpp文件,并在工程设置中添加Windows库,然后编译和运行代码即可看到窗口的显示。 请注意,这只是一个简单的示例,你可以根据自己的需求进一步扩展和修改窗口的功能和外观。另外,还有其他的库如Qt、MFC等可以在DevC++中使用来创建图形化界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值