NEFU计算机图形学实验三

设计一个要进行图形变换的二维平面图形(比如一个多边形),编程实现5种基本几何变换(平移、比例缩放、旋转、对称、错切),运行程序,分别显示出变换前、后的图形。

平移:

// suoView.cpp : implementation of the CSuoView class
//

#include "stdafx.h"
#include "suo.h"

#include "suoDoc.h"
#include "suoView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// CSuoView
void ping(POINT p[20],int m,float MoveX,float MoveY)
{
	for(int i=0;i<m;i++)
	{p[i].x=p[i].x+MoveX;p[i].y=p[i].y+MoveY;}
}

IMPLEMENT_DYNCREATE(CSuoView, CView)

BEGIN_MESSAGE_MAP(CSuoView, CView)
	//{{AFX_MSG_MAP(CSuoView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/
// CSuoView construction/destruction

CSuoView::CSuoView()
{
	// TODO: add construction code here

}

CSuoView::~CSuoView()
{
}

BOOL CSuoView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/
// CSuoView drawing

void CSuoView::OnDraw(CDC* pDC)
{
	CSuoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	int color,n=4;
	float th,x0,y0,SkewX,SkewY,ScaleX,ScaleY,MoveX,MoveY;
	POINT ply[4]={{75,100},{110,100},{150,30},{120,30}},p0={300,300},ps={20,20},pe={300,400};
	th=90;x0=p0.x;y0=p0.y;SkewX=0.6;SkewY=0;ScaleX=2.0;ScaleY=2.0;MoveX=100,MoveY=100;
	
	//
	color=RGB(28,28,28);
	CPen pen1(PS_DASH,1,color);
	pDC->SelectObject(&pen1);
	pDC->Polygon(ply,n);

    ping(ply,n,MoveX,MoveY);


	color=RGB(255,0,0);
	CPen pen2(PS_SOLID,2,color);
	pDC->SelectObject(&pen2);
	pDC->Polygon(ply,n);


}

/
// CSuoView printing

BOOL CSuoView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CSuoView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CSuoView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/
// CSuoView diagnostics

#ifdef _DEBUG
void CSuoView::AssertValid() const
{
	CView::AssertValid();
}

void CSuoView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CSuoDoc* CSuoView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSuoDoc)));
	return (CSuoDoc*)m_pDocument;
}
#endif //_DEBUG

/
// CSuoView message handlers

比例缩放:

// PingView.cpp : implementation of the CPingView class
//

#include "stdafx.h"
#include "Ping.h"

#include "PingDoc.h"
#include "PingView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// CPingView
void suofang(POINT p[20],int m,float ScaleX,float ScaleY)
{
for(int i=0;i<m;i++)
{	p[i].x=p[i].x*ScaleX;
	p[i].y=p[i].y*ScaleY;
}

}
IMPLEMENT_DYNCREATE(CPingView, CView)

BEGIN_MESSAGE_MAP(CPingView, CView)
	//{{AFX_MSG_MAP(CPingView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/
// CPingView construction/destruction

CPingView::CPingView()
{
	// TODO: add construction code here

}

CPingView::~CPingView()
{
}

BOOL CPingView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/
// CPingView drawing

void CPingView::OnDraw(CDC* pDC)
{
	CPingDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	int color,n=4;
	float th,x0,y0,SkewX,SkewY,ScaleX,ScaleY,MoveX,MoveY;
	POINT ply[4]={{75,100},{110,100},{150,30},{120,30}},p0={300,300},ps={20,20},pe={300,400};
	th=90;x0=p0.x;y0=p0.y;SkewX=0.4;SkewY=0;ScaleX=2.0;ScaleY=2.0;MoveX=400,MoveY=200;
	
	//
	color=RGB(28,28,28);
	CPen pen1(PS_DASH,1,color);
	pDC->SelectObject(&pen1);
	pDC->Polygon(ply,n);


	suofang(ply,n,ScaleX,ScaleY);

//
	color=RGB(255,0,0);
	CPen pen2(PS_SOLID,2,color);
	pDC->SelectObject(&pen2);
	pDC->Polygon(ply,n);


}


/
// CPingView printing

BOOL CPingView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CPingView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CPingView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/
// CPingView diagnostics

#ifdef _DEBUG
void CPingView::AssertValid() const
{
	CView::AssertValid();
}

void CPingView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CPingDoc* CPingView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPingDoc)));
	return (CPingDoc*)m_pDocument;
}
#endif //_DEBUG

/
// CPingView message handlers

旋转:

// xuanView.cpp : implementation of the CXuanView class
//

#include "stdafx.h"
#include "xuan.h"
#include <cmath>
#include "xuanDoc.h"
#include "xuanView.h"

#ifndef M_PI
#define M_PI 3.14159265358979323846 // 定义 PI 常量
#endif

void RotateTransform(POINT p[20], int m, POINT Cen, float theta, CDC* pDC)
{
    int i;
    double a, b;
    POINT p1[20];
    double alfa = theta * M_PI / 180; // 使用 M_PI 替代 PI
    a = cos(alfa); // 使用 cos 函数
    b = sin(alfa); // 使用 sin 函数
    for (i = 0; i < m; i++)
    {
        p1[i].x = p[i].x * a - p[i].y * b + Cen.x * (1 - a) + Cen.y * b;
        p1[i].y = p[i].x * b + p[i].y * a - Cen.x * b + Cen.y * (1 - a);
    }

    for (i = 0; i < m; i++)
    {
        p[i].x = p1[i].x;
        p[i].y = p1[i].y;
    }

}
IMPLEMENT_DYNCREATE(CXuanView, CView)

BEGIN_MESSAGE_MAP(CXuanView, CView)
	//{{AFX_MSG_MAP(CXuanView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/
// CXuanView construction/destruction

CXuanView::CXuanView()
{
	// TODO: add construction code here

}

CXuanView::~CXuanView()
{
}

BOOL CXuanView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/
// CXuanView drawing

void CXuanView::OnDraw(CDC* pDC)
{
    CXuanDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    int color, n = 4;
    float th, x0, y0, SkewX, SkewY, ScaleX, ScaleY, MoveX, MoveY;
    POINT ply[4] = {{50, 75}, {150, 100}, {150, 200}, {120, 180}}, p0 = {300, 300}, ps = {200, 20}, pe = {300, 400};
    th = 140;
    x0 = p0.x;
    y0 = p0.y;
    SkewX = 0.6;
    SkewY = 0;
    ScaleX = 2.0;
    ScaleY = 2.0;
    MoveX = 400;
    MoveY = 200;

    color = RGB(28, 28, 28);
    CPen pen1(PS_DASH, 1, color);
    pDC->SelectObject(&pen1);
    pDC->Polygon(ply, n);

    RotateTransform(ply, n, p0, th, pDC);

    color = RGB(255, 0, 0);
    CPen pen2(PS_SOLID, 2, color);
    pDC->SelectObject(&pen2);
    pDC->Polygon(ply, n);
}


/
// CXuanView printing

BOOL CXuanView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CXuanView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CXuanView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/
// CXuanView diagnostics

#ifdef _DEBUG
void CXuanView::AssertValid() const
{
	CView::AssertValid();
}

void CXuanView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CXuanDoc* CXuanView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CXuanDoc)));
	return (CXuanDoc*)m_pDocument;
}
#endif //_DEBUG

/
// CXuanView message handlers

对称:

// duiView.cpp : implementation of the CDuiView class
//

#include "stdafx.h"
#include "dui.h"

#include "duiDoc.h"
#include "duiView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// CDuiView
void dui(POINT p[20],int m,POINT ps,POINT pe,CDC *pDC)
{
	int i;POINT p1[20];double A,B,C;
	A=pe.y-ps.y;B=ps.x-pe.x;C=-(A*ps.x+B*ps.y);
	for(i=0;i<m;i++)
	{
	p1[i].x=((B*B-A*A)*p[i].x-2*A*B*p[i].y-2*A*C)/(A*A+B*B);
	p1[i].y=((A*A-B*B)*p[i].y-2*A*B*p[i].x-2*B*C)/(A*A+B*B);
	}

	for(i=0;i<m;i++)
	{
		p[i].x=p1[i].x;	p[i].y=p1[i].y;
	}
	CPen pen(PS_DASHDOT,1,RGB(0,0,255));
	pDC->SelectObject(&pen);

	pDC->MoveTo(ps.x,ps.y);
	pDC->LineTo(pe.x,pe.y);
	

}



IMPLEMENT_DYNCREATE(CDuiView, CView)

BEGIN_MESSAGE_MAP(CDuiView, CView)
	//{{AFX_MSG_MAP(CDuiView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/
// CDuiView construction/destruction

CDuiView::CDuiView()
{
	// TODO: add construction code here

}

CDuiView::~CDuiView()
{
}

BOOL CDuiView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/
// CDuiView drawing

void CDuiView::OnDraw(CDC* pDC)
{
	CDuiDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	int color,n=4;
	float th,x0,y0,SkewX,SkewY,ScaleX,ScaleY,MoveX,MoveY;
	POINT ply[4]={{50,75},{110,100},{150,300},{120,30}},p0={50,300},ps={200,200},pe={30,40};
	th=90;x0=p0.x;y0=p0.y;SkewX=0.6;SkewY=0;ScaleX=2.0;ScaleY=2.0;MoveX=400,MoveY=200;
	
	//
	color=RGB(28,28,28);
	CPen pen1(PS_DASH,1,color);
	pDC->SelectObject(&pen1);
	pDC->Polygon(ply,n);


	dui(ply,n,ps,pe,pDC);

//
	color=RGB(255,0,0);
	CPen pen2(PS_SOLID,2,color);
	pDC->SelectObject(&pen2);
	pDC->Polygon(ply,n);


}


/
// CDuiView printing

BOOL CDuiView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CDuiView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CDuiView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/
// CDuiView diagnostics

#ifdef _DEBUG
void CDuiView::AssertValid() const
{
	CView::AssertValid();
}

void CDuiView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CDuiDoc* CDuiView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDuiDoc)));
	return (CDuiDoc*)m_pDocument;
}
#endif //_DEBUG

/
// CDuiView message handlers

错切:

// tuView.cpp : implementation of the CTuView class
//

#include "stdafx.h"
#include "tu.h"

#include "tuDoc.h"
#include "tuView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// CTuView
void cuoqie(POINT p[20],int m,float SkewX,float SkewY)
{
	for(int i=0;i<m;i++)
	{	
		p[i].x=p[i].x+p[i].y*SkewX;  p[i].y=p[i].y+p[i].x*SkewY;
	}
}

IMPLEMENT_DYNCREATE(CTuView, CView)

BEGIN_MESSAGE_MAP(CTuView, CView)
	//{{AFX_MSG_MAP(CTuView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/
// CTuView construction/destruction

CTuView::CTuView()
{
	// TODO: add construction code here

}

CTuView::~CTuView()
{
}

BOOL CTuView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/
// CTuView drawing

void CTuView::OnDraw(CDC* pDC)
{
	CTuDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	int color,n=4;
	float th,x0,y0,SkewX,SkewY,ScaleX,ScaleY,MoveX,MoveY;
	POINT ply[4]={{300,400},{150,200},{300,200},{250,180}},p0={240,240},ps={190,200},pe={150,140};
	th=90;x0=p0.x;y0=p0.y;SkewX=0.4;SkewY=0;ScaleX=2.0;ScaleY=2.0;MoveX=400,MoveY=300;
	
	//
	color=RGB(28,28,28);
	CPen pen1(PS_DASH,1,color);
	pDC->SelectObject(&pen1);
	pDC->Polygon(ply,n);


	cuoqie(ply,n,SkewX,SkewY);

	color=RGB(144,238,144);
	CPen pen2(PS_SOLID,2,color);
	pDC->SelectObject(&pen2);
	pDC->Polygon(ply,n);


}


/
// CTuView printing

BOOL CTuView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CTuView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CTuView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/
// CTuView diagnostics

#ifdef _DEBUG
void CTuView::AssertValid() const
{
	CView::AssertValid();
}

void CTuView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CTuDoc* CTuView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTuDoc)));
	return (CTuDoc*)m_pDocument;
}
#endif //_DEBUG

/
// CTuView message handlers

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/579208.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

游戏新手村21:再谈游戏广告页面设计

前文我们说到了网页游戏的LandingPage页面设计中需要遵循的一些规范和注意事项&#xff0c;本章我们重点谈下网络游戏的广告页面设计。 之前在金山的时候&#xff0c;大家习惯或者喜欢称LandingPage为分流页&#xff0c;这个页面需要加入哪些游戏信息才能在短时间内俘获玩家的…

cJSON的使用

文章目录 一、CJSON初识二、CJSON解析器基础三、CJSON解析数据JSON解析基础CJSON解析数组数据CJSON解析嵌套数据 五、创建JSON数据 一、CJSON初识 JSON (JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;常用于在网络之间传输数据。它是一种文本格式&#…

Linux计划任务书以及定时任务的编写

一、程序可以通过两种方式执行&#xff1a; 手动执行利用调度任务&#xff0c;依据一定的条件自动执行 自动执行可通过一下两个命令来实现: &#xff08;1&#xff09;At &#xff08;单一工作调度&#xff09; &#xff08;2&#xff09;Cron &#xff08;循环工作调度&a…

微信小程序的开发

1.了解项目的基本组成结构 pages 用来存放所有小程序的页面 utils 用来存放工具性质的模块(例如:格式化时间的自定义模块) app.js 小程序项目的入口文件 app.json 小程序项目的全局配置文件 app.wxss 小程序项目的全局样式文件 project.config.json 项目的配置文件 sitem…

(GEE)2000-2020年黄河流域时序渐变图及高程模型计算 JavaScript版

文章目录 一. 选取目标区域二. NDVI实现三. 高程模型DEM实现四. 时序图五. 植被覆盖类型六. 参考文献 首先推荐吴秋生老师团队开源的便捷构建网站&#xff1a;适用于地理空间应用的Streamlight 吴秋生老师团队的工具请自行探索。本文讲解基于GEE云开发平台实现&#xff0c;基于…

吾日三省吾身---对平常遇到的错误总结

✨个人主页&#xff1a; 不漫游-CSDN博客 前言 本篇文章是对平常练习遇到的问题总结&#xff0c;多吸取经验教训才能避免未来再犯~ Java语法部分 &#xff08;一&#xff09;多态 思考&#xff1a;这道题很明显考察的是多态的知识点&#xff0c;即一个对象可以被赋值给其父类…

11.盛最多水的容器 C++

一开始我最先想到的是暴力解法&#xff0c;就是两个循环嵌套依次遍历&#xff0c;所有情况都过一遍找出最大值&#xff0c;这样示例的结果虽然是正确的&#xff0c;但是超时。所以暴力解法行不通&#xff0c;双指针思考才是正道&#xff0c;双指针一般都是一边一个&#xff0c;…

拉链法解决哈希冲突

1.基本思想: 相同散列地址的记录链成一单链表,m个散列地址就设m个单链表,然后用一个数组将m个单链表的表头指针存储起来,形成一个动态的结构. 例如:一组关键字为{19,14,23,1,68,20,84,27,55,11,10,79},散列函数为:Hash(key)key%13, 就会发现有些元素是同义词,比如14%131,1%131…

江开2024年春《计算机组成原理 060214》第4次计分作业参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 单选题 1某计算机字长32位&#xff0c;其存储容量为4GB&am…

MySQL__锁

文章目录 &#x1f60a; 作者&#xff1a;Lion J &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_69252724 &#x1f389; 主题&#xff1a; MySQL__锁&#xff09; ⏱️ 创作时间&#xff1a;2024年04月27日 ———————————————— 这里写目录…

Java高阶私房菜-JVM垃圾回收机制及算法原理探究

目录 垃圾回收机制 什么是垃圾回收机制 JVM的自动垃圾回收机制 垃圾回收机制的关键知识点 初步了解判断方法-引用计数法 GCRoot和可达性分析算法 什么是可达性分析算法 什么是GC Root 对象回收的关键知识点 标记对象可回收就一定会被回收吗&#xff1f; 可达性分析算…

阳光电源社招前程无忧智鼎题库及远程包过助攻需要重点考察什么?

阳光电源社招前程无忧智鼎题库及远程包过助攻需要重点考察什么&#xff1f; 结合长期服务大型国有企业校招工作的经验&#xff0c;我们总结出阳光电源社招笔试的典型模式&#xff1a;行政职业能力测试企业应知应会测试心理测评&#xff0c;综合考察候选人的政治素养、文化素养…

VC2022 + protobuf

google这是有私心啊&#xff0c;protobuf从某个版本开始&#xff0c;依赖了一个google自己推出的大型组件集&#xff0c;Abseil&#xff0c;有点类似于Boost了&#xff0c;业内用的人&#xff0c;从个人狭窄的圈子来说&#xff0c;应该是不多的&#xff0c;据说google的众贤用的…

【UnityRPG游戏制作】RPG项目的背包系统商城系统和BOSS大界面

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

【C++】简易二叉搜索树

目录 一、概念&#xff1a; 二、代码实现&#xff1a; 大致结构&#xff1a; 1、遍历&#xff1a; 2、insert 3、find 4、erase 三、总结&#xff1a; 一、概念&#xff1a; 二叉搜索树又称为二叉排序树&#xff0c;是一种具有特殊性质的二叉树&#xff0c;对于每一个节…

springboot+springsecurity+vue前后端分离权限管理系统

有任何问题联系本人QQ: 1205326040 1.介绍 优秀的权限管理系统&#xff0c;核心功能已经实现&#xff0c;采用springbootvue前后端分离开发&#xff0c;springsecurity实现权限控制&#xff0c;实现按钮级的权限管理&#xff0c;非常适合作为基础框架进行项目开发。 2.效果图…

ICP点云配准初探

ICP点云配准初探 1 简介2 常用的点云配准算法3 ICP&#xff08;Iterative Closest Point&#xff0c;最近点迭代法&#xff09;3.1 ICP要解决的问题3.2 ICP的核心思想3.3 算法流程3.4 总结 4 ICP优缺点 1 简介 在逆向工程&#xff0c;计算机视觉&#xff0c;文物数字化等领域中…

香港BTC、ETH现货ETF同时通过,对行业意义几何?

香港比美国更快一步通过以太坊现货 ETF。 2024 年 4 月 15 日&#xff0c;香港嘉实国际资产管理有限公司&#xff08;Harvest Global Investments&#xff09;今天宣布&#xff0c;得到香港证监会的原则上批准&#xff0c;将推出两大数字资产&#xff08;比特币及以太坊&#…

​可视化大屏C位图:园区鸟瞰

将园区鸟瞰图作为可视化大屏设计的焦点图有以下几个好处&#xff1a; 提供全局视图&#xff1a;园区鸟瞰图可以展示整个园区的布局和结构&#xff0c;提供全局视图。这对于大型园区或复杂的场所来说尤为重要&#xff0c;用户可以一目了然地了解整个园区的规模、分布和关联关系…

go设计模式之工厂方法模式

工厂方法模式 什么是工厂方法模式 工厂方法模式是一种创建型设计模式&#xff0c;它定义了一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化推迟到其子类。 这个接口就是工厂接口&#xff0c;子类就是具体工厂类&#xff0c;而需要创…
最新文章