首页 > 其他分享 ># VS2022手动引入easyX绘制工具

# VS2022手动引入easyX绘制工具

时间:2022-11-22 16:04:23浏览次数:56  
标签:p2d 手动 angle int double void easyX p3d VS2022

1.下载EasyX_20220901.exe安装包,手动修改后缀名为7z,解压

2、找到vs的安装目录

\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\VS

3、把前面解压出来的include和lib文件夹里面的文件,拷贝到vs/下面对应的文件夹汇总

4、测试easyx绘图效果

// 程序名称:三维旋转球
// 编译环境:Visual C++ 6.0 ~ 2019,EasyX_20210730
// 代码发布:2010-9-14
// 最后更新:2021-8-20
//
#include <graphics.h>
#include <time.h>
#include <math.h>
#include <conio.h>

#define MAXPOINT	5000
#define	PI			3.1415926536


// 定义三维点
struct POINT3D
{
	double x;
	double y;
	double z;
};

POINT3D p3d[MAXPOINT];		// 所有的三维点
double viewZ = 3;			// 视点 z 轴坐标


// 初始化三维点
void InitPoint()
{
	// 产生随机种子
	srand((unsigned)time(NULL));
	
	// 产生球体表面的随机点(根据球体面积与其外切圆柱面积的关系)
	double rxy, a;
	for(int i = 0; i < MAXPOINT; i++)
	{
		p3d[i].z = 2.0 * rand() / RAND_MAX - 1;	// 求随机 z 坐标
		rxy = sqrt(1 - p3d[i].z * p3d[i].z);	// 计算三维矢量在 xoy 平面的投影长度
		a = 2 * PI * rand() / RAND_MAX;			// 产生随机角度
		p3d[i].x = cos(a) * rxy;
		p3d[i].y = sin(a) * rxy;
	}
}


// 使三维点按 x 轴旋转指定角度
void RotateX(POINT3D &p, double angle)
{
	double y = p.y;
	p.y = p.y * cos(angle) + p.z * sin(-angle);
	p.z =   y * sin(angle) + p.z * cos(angle);
}


// 使三维点按 y 轴旋转指定角度
void RotateY(POINT3D &p, double angle)
{
	double x = p.x;
	p.x = p.x * cos(angle) + p.z * sin(-angle);
	p.z =   x * sin(angle) + p.z * cos(angle);
}


// 使三维点按 z 轴旋转指定角度
void RotateZ(POINT3D &p, double angle)
{
	double x = p.x;
	p.x = p.x * cos(angle) + p.y * sin(-angle);
	p.y =   x * sin(angle) + p.y * cos(angle);
}


// 将三维点投影到二维屏幕上(单点透视)
POINT Projection(POINT3D p)
{
	POINT p2d;
	p2d.x = (int)(p.x * ( viewZ / (viewZ - p.z) ) * 200 + 0.5) + 320;
	p2d.y = (int)(p.y * ( viewZ / (viewZ - p.z) ) * 200 + 0.5) + 240;
	return p2d;
}


// 精确延时函数(可以精确到 1ms,精度 ±1ms)
// by yangw80<[email protected]>, 2011-5-4
void HpSleep(int ms)
{
	static clock_t oldclock = clock();		// 静态变量,记录上一次 tick

	oldclock += ms * CLOCKS_PER_SEC / 1000;	// 更新 tick

	if (clock() > oldclock)					// 如果已经超时,无需延时
		oldclock = clock();
	else
		while(clock() < oldclock)			// 延时
			Sleep(1);						// 释放 CPU 控制权,降低 CPU 占用率
//			Sleep(0);						// 更高精度、更高 CPU 占用率
}


// 实现直接操作显示缓冲区的设备对象
class Device
{
private:
	DWORD *m_pbuffer;
	int m_width;
	int m_height;

public:
	Device(int w, int h) : m_width(w), m_height(h)
	{
		initgraph(w, h);
		BeginBatchDraw();
		m_pbuffer = GetImageBuffer();
	}

	~Device()
	{
		EndBatchDraw();
		closegraph();
	}

	// 画点
	void putpixel(int x, int y, COLORREF c)
	{
		if (x >= 0 && x < m_width && y >= 0 && y < m_height)
			m_pbuffer[y * m_width + x] = BGR(c);
	}

	// 更新显示
	void flushdevice()
	{
		FlushBatchDraw();
	}
};


// 主函数
int main()
{
	Device d(640, 480);
	InitPoint();

	int c;
	POINT p2d;
	while(!_kbhit())
	{
		cleardevice();			// 清除屏幕

		for(int i=0; i < MAXPOINT; i++)
		{
			// 使该点围绕三个坐标轴做旋转运动
			RotateX(p3d[i], PI / 800);
			RotateY(p3d[i], PI / 600);
			RotateZ(p3d[i], PI / 400);
			
			// 根据点的深度,产生相应灰度的颜色
			c = (int)(p3d[i].z * 100) + 155;
			
			// 投影该点到屏幕上
			p2d = Projection(p3d[i]);
			
			// 画点
			d.putpixel(p2d.x, p2d.y, RGB(c, c, c));
		}

		d.flushdevice();
		HpSleep(10);			// 延时 10 毫秒
	}

	return 0;
}

标签:p2d,手动,angle,int,double,void,easyX,p3d,VS2022
From: https://www.cnblogs.com/chengqiang521/p/16915368.html

相关文章

  • nexus-maven-repository-index.zip手动下载与设置
    问题描述:在启动eclipse的时候,在maven控制台经常会看到更新nexus-maven-repository-index.zip,用eclipse更新速度会很慢,甚至有不能完成下载的情况;问题解决:1.在你的eclipse......
  • vs2022 使用 cmake
    vs版本:vs2022vs中默认不使用cmake,在项目->cmake工作区设置中修改{"enableCMake":flase}默认为false,修改为true即可。点击CMakeLists.txt文件设置启动项,......
  • EasyX图形库安装,以及使用样例(vc6.0,vs2013,其他类同)
    ①​​官网下载​​②解压安装(由于自己电脑安装了vc6.0和vs2013以该两个为例,其他都是一样的安装方法)③图形库测试利用图形库画星空(l编译器vs2013)#include<stdafx.h>#......
  • EasyX之鼠标
    一、头文件#include<graphics.h>二、鼠标功能以下截取自graphics.h//Oldmouserelatedfunctions旧鼠标相关功能//Mousemessage//WM_MOUSEMOVE......
  • 关于VS2022 报错:MSB3027 无法将"xxx.dll"复制到"xxx"超出了重试计数 10 问题分析与解
    从标题我们不难看出,这个问题实际就是系统不能够将这个dll文件那过来放到其他目录去。其实我不知道大家是一个什么思路哈,我一开始就是无脑的去网上查找解决方案,但是在网上......
  • uniapp 手动引用组件
    1.官网下载https://ext.dcloud.net.cn/?cat1=2&cat2=21https://uniapp.dcloud.net.cn/component/2.把代码放到项目\components\uni-data-checkbox文件下3.在需要......
  • 初识EasyX图形编程
    相关视频——【C/C++/EasyX】学编程,做游戏,小白快速入门图形编程,零基础入门到精通,学习就是这么快乐_哔哩哔哩(゜-゜)つロ干杯~-bilibili我的小站——半生瓜のblog,同步更新......
  • Spring中手动控制事务
    在spring中大部分时候使用的是声明式事务,也就是@Transaction注解,但在某些特殊情况下也需要手动控制事务的开启/提交/回滚。工具类封装:1@Component2pu......
  • 手动释放Linux内存的方法
    Linux释放内存的命令:syncecho1>/proc/sys/vm/drop_caches drop_caches的值可以是0-3之间的数字,代表不同的含义:0:不释放(系统默认值)1:释放页缓存2:释放dentries和ino......
  • 手动实现 vue3 [ reactive, computed, watch ]
    一、vue.js1importreactivefrom"./reactive";2importWatcherfrom"./Watcher";3importcomputedfrom"./computed";4importwatchfrom"./watch";56ex......