C++根据三点求平行四边形的平分阵列

利用python通过三点法计算两个坐标系之间的位姿变换矩阵 python三点法位姿矩阵计算 阅读详情

C++根据三点求平行四边形的平分阵列

如下图,已知ABC三个点,且ABCD是平行四边形,求各个点的(阵列)的坐标
在这里插入图片描述


void OnBnClickedButtonCreatematrix3point()
{
	//通过前面三点,计算出第四点
	POINTF64 t_pointMiddle;//对角线交点
	t_pointMiddle.x = (pMain->m_NodeMatrix.m_point_ld.x+
		pMain->m_NodeMatrix.m_point_ru.x)/2;
	t_pointMiddle.y = (pMain->m_NodeMatrix.m_point_ld.y+
		pMain->m_NodeMatrix.m_point_ru.y)/2;

	POINTF64 t_pointRd;//右下角第四点坐标
	t_pointRd.x = 2*t_pointMiddle.x-pMain->m_NodeMatrix.m_point_lu.x;
	t_pointRd.y = 2*t_pointMiddle.y-pMain->m_NodeMatrix.m_point_lu.y;
	//到此四点坐标全部获取到

	POINTF64 vec_upSide;//上边向量
	vec_upSide.x = pMain->m_NodeMatrix.m_point_ru.x - pMain->m_NodeMatrix.m_point_lu.x;
	vec_upSide.y = pMain->m_NodeMatrix.m_point_ru.y - pMain->m_NodeMatrix.m_point_lu.y;
	POINTF64 vec_downSide;//下边向量
	vec_downSide.x = t_pointRd.x - pMain->m_NodeMatrix.m_point_ld.x;
	vec_downSide.y = t_pointRd.y - pMain->m_NodeMatrix.m_point_ld.y;

	
	POINTF64 vec_upUnit;//求上边单位向量,整体向量除以列数
	vec_upUnit.x = vec_upSide.x/(pMain->m_NodeInfo.m_s32Col-1);
	vec_upUnit.y = vec_upSide.y/(pMain->m_NodeInfo.m_s32Col-1);
	POINTF64 vec_downUnit;//求下边单位向量,整体向量除以列数
	vec_downUnit.x = vec_downSide.x/(pMain->m_NodeInfo.m_s32Col-1);
	vec_downUnit.y = vec_downSide.y/(pMain->m_NodeInfo.m_s32Col-1);


	vector<POINTF> vec1;
	vector<POINTF> vec2;
	vector<POINTF> vecdst;
	//开始获取上\下边的所有点
	for(int i=0;i<pMain->m_NodeInfo.m_s32Col;++i)
	{
		POINTF tep;
		tep.x = i*vec_upUnit.x+pMain->m_NodeMatrix.m_point_lu.x;
		tep.y = i*vec_upUnit.y+pMain->m_NodeMatrix.m_point_lu.y;
		vec1.push_back(tep);

		POINTF tep1;
		tep1.x = i*vec_downUnit.x+pMain->m_NodeMatrix.m_point_ld.x;
		tep1.y = i*vec_downUnit.y+pMain->m_NodeMatrix.m_point_ld.y;
		vec2.push_back(tep1);
	}



	//1\先获取上下两边向量,求平均点
	pMain->m_dstPos.clear();
	for(int i=0;i<pMain->m_NodeInfo.m_s32Col;++i)
	{
		if(i%2==0)
		{
			vecdst.push_back(vec1[i]);
			vecdst.push_back(vec2[i]);
		}
		else
		{
			vecdst.push_back(vec2[i]);
			vecdst.push_back(vec1[i]);
		}
	}

	int m=0;
	if(pMain->Databuf!=NULL)
	{
		delete pMain->Databuf;
		pMain->Databuf =NULL;
	}
	pMain->Databuf = new T2DCompareData[pMain->m_NodeInfo.m_s32Col*pMain->m_NodeInfo.m_s32Row];
	if(pMain->Databuf==NULL)
	{
		AfxMessageBox(_T("动态申请内存空间失败,请联系工程师"));
		return;
	}
	bool t_bturn = true;
	for(int i=0;i<vecdst.size()-1;)
	{
		POINTF vec_Unit;
		vec_Unit.x = (vecdst[i+1].x-vecdst[i].x)/(pMain->m_NodeInfo.m_s32Row-1);
		vec_Unit.y = (vecdst[i+1].y-vecdst[i].y)/(pMain->m_NodeInfo.m_s32Row-1);
		if(t_bturn==true)//从上到下
		{
			for(int j=0;j<pMain->m_NodeInfo.m_s32Row;++j)//起始点+单位向量
			{
				T2DCompareData tep;
				tep.px= vecdst[i].x+vec_Unit.x*j;
				tep.py= vecdst[i].y+vec_Unit.y*j;
				pMain->Databuf[m++] = tep;
				pMain->m_dstPos.push_back(tep);
			}
			t_bturn = !t_bturn;
		}
		else//从下到上
		{
			for(int j=0;j<pMain->m_NodeInfo.m_s32Row;++j)//起始点+单位向量
			{
				T2DCompareData tep;
				tep.px= vecdst[i].x+vec_Unit.x*j;
				tep.py= vecdst[i].y+vec_Unit.y*j;
				pMain->Databuf[m++] = tep;
				pMain->m_dstPos.push_back(tep);
			}
			t_bturn = !t_bturn;
		}
		i+=2;
	}
	//开始保存点阵的中心点参数,下次开机直接取用
	SaveMatrix();
}

3dMax脚本类插件:不写 C++也能造“原生”工具 从plugin关键字到场景持久化,拆解 MAXScript 插件开发全流程! 阅读详情

相关推荐

大专非科班拿下汇丰外包Java岗:我的TEKSystem面试全流程复盘(含IKM笔试真题)

本文详细记录了一位非科班大专生成功通过TEKSystem面试,拿下汇丰银行Java外包岗位的全过程。从IKM全英文笔试到技术面试,作者分享了7个关键转折点的实战经验,包括简历优化、技术考点、英语面试策略及薪酬谈判技巧,特别适合初级Java开发者参考。

weixin_30074763的博客 392

一个计算行列坐标的应用

客户那边得到了一组点位数据,是阵列得来的,只给出了坐标,没有行列信息,可是客户给的打码内容,却是按照行列给出的,有对应的行列值,所以这里需要的是做到这些点位和行列打码内容一一对应关联。......

luuuuuuuuuuuuuuuuuu 1009

MATLAB机械臂建模实战:标准D-H法与改进D-H法到底选哪个?(附代码对比)

本文深入解析MATLAB中机械臂建模的标准D-H法与改进D-H法的本质区别,提供详细的代码对比和可视化结果。通过实际案例,帮助读者根据应用场景选择合适方法,并避免常见建模陷阱。特别关注Link函数和SerialLink工具的使用技巧,提升机械臂建模效率。

grape的博客 1121

用3点结构数列构造4点结构数列

结构数列的递推式

staple 767

VS2022命令行编译C++报错?一招解决‘fatal error C1034: iostream: 不包括路径集‘

本文针对VS2022命令行编译C++时常见的'fatal error C1034: iostream: 不包括路径集'错误,深入剖析了其根源在于环境变量缺失。文章提供了永久配置用户环境变量(PATH、INCLUDE、LIB)的一劳永逸解决方案,确保在任何终端中都能直接使用cl命令进行编译,并给出了进阶配置与常见错误排查指南。

weixin_29011667的博客 303

COMSOL报错调试总结(不定期更新)

COMSOL报错调试总结1. 可定位错误1.1 除零错误1.2 未定义变量值1.3 边界条件/材料属性等缺失2. 难定位错误2.1. 装配期间内存不足 官方给的案例总是非常完美,运行流畅,结果完美。但是自己做模型时候就总是报错,而且不像自己coding的程序那样可以明确定位哪里出了bug。这里把我碰到的一些报错问题以及调试方法记录下来~ 部分来源于以下参考来源: http://wap.sciencenet.cn/blog-1467490-1118453.html?mobile=1 1. 可定位错误 以下错误

jessica0307的博客 8万+

[三边定位] C# 演示程序

 计划用CC2530做定位,网上找了一些求圆交点的程序, 修改成3个圆求交点的质心,感觉算法还行。 粗略写了一下程序,结果还行。   现在只能手动输入3个圆的信息。 后面需要再优化。    全部未优化的程序: using System; using System.Collections.Generic; using System.ComponentModel; u...

weixin_30471561的博客 375

MemSeg:一种差异和共性来检测图像表面缺陷的半监督方法

本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力,从而更好地区分非正常图像。如图一所示。差异(differences):MemSeg引入人工模拟的异常图像在训练阶段使模型能够区分正常和异常的图像,减轻了半监督学习只能用正常样本进行训练的不足,然后在推理阶段可以直接输入图像无需做任何后处理。共性(commonalities):MemSeg引入了一个记忆池来记录正常样本的通用模式,在训练和推理阶段,比较输入图像和记忆池中的样本之间的差异,为异常区域的定位提供有用的信息。

斯人若彩虹,遇上方知有! 4839

C++根据三个点坐标计算夹角

计算角度ACB,其中C是中心点,A B C三个点的坐标为A(x1,y1),B(x2,y2),C(x3,y3)。 #include <iostream> #include <cmath> using namespace std; /* get angle ACB, point C is the center point A(x1,y1) B(x2,y2) C(x3,y3) ...

xiangxianghehe的博客 1万+

机器人动力学仿真软件:PyBullet_(10).案例分析:双足机器人行走仿真

在本节中,我们将详细探讨如何使用PyBullet进行双足机器人的行走仿真。双足机器人行走仿真是一个复杂的动力学问题,涉及多个关节的协调运动和环境交互。通过本节的学习,您将了解如何创建和控制双足机器人模型,设置仿真环境,以及实现基本的行走算法。首先,我们需要创建一个双足机器人模型。PyBullet支持多种模型格式,包括URDF(Unified Robot Description Format)和MJCF(MuJoCo XML Format)。URDF是一种广泛使用的机器人模型描述格式,我们将使用URDF来创建

kkchenjj的博客 908

16. SAP Fiori Elements 应用里图片字段(Image)的显示原理介绍

很多朋友向我反映,学习了 一段时间的 SAP Fiori Elements 开发,但是感觉整套体系对于自己来说还是个黑盒子,很多技术点,看了 SAP 官方帮助文档后,觉得自己懂了,但是一旦需要自己动手做一些东西出来时,又觉得一片茫然。 其实笔者自己也经历过这个过程。究其原因,还是大家对 Fiori Elements 一些技术细节没有理解,对 SAP 官方的知识点仅仅停留在记忆,甚至是死记硬背上面。 不过没有关系,本教程笔者会刻意设置一些练习,让大家动手,在实战中逐渐熟悉 Fiori Elements 这

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 754

第四天:图像相似度

这篇C++编程题解介绍了如何计算两幅黑白图像的相似度。程序首先读取图像的行列数m和n,然后分别存储两幅图像的像素数据到两个二维数组中。通过嵌套循环遍历比较每个对应位置的像素值,统计相同像素的数量。最后计算相同像素占比并转换为百分比形式输出,结果保留两位小数。解题思路包括:1)使用二维数组存储图像数据;2)嵌套循环遍历比较像素;3)类型转换确保精确计算;4)按公式计算百分比相似度。该问题展示了处理二维数据的基本方法,适用于图像处理等场景。

岁岁长安 1151

5、硬件工程师笔试面试——上拉电阻、下拉电阻(2025版本)

本文系统介绍了上拉电阻和下拉电阻的原理与应用。上拉电阻通过连接电源确保电路高电平状态,常用于数字电路防抖、OC门驱动等场景;下拉电阻连接地线维持低电平,适用于低电平触发电路。文章详细分析了两种电阻的选择方法、功耗与响应速度的平衡策略,以及在高速信号传输中的影响差异。同时对比了二者的优缺点,并提供了模拟电路中的应用实例。最后给出了电阻值计算的工程方法,为硬件工程师的电路设计提供了实用参考。

XU157303764的博客 2868

压缩艺术:洛谷P1320点阵编码的C++魔法

本文详解洛谷P1320点阵图压缩编码问题,提供C++实现方案。核心算法通过滑动窗口统计连续0/1段,严格遵循交替输出规则,处理全0/全1等边界情况。关键步骤包括:1)拼接点阵字符串;2)识别连续段;3)根据首字符决定输出格式(首为1时先补0)。给出完整代码及优化建议(流式处理、IO加速),并分析常见错误(遗漏末段、格式错误)。该算法在图像处理、数据存储等领域有广泛应用,时间复杂度O(N²)。附测试用例及竞赛技巧,帮助掌握连续段压缩的核心思想。

stillwatersss的博客 895

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

那些惊艳的算法们(三)—— 时间轮

同步发表于:http://blog.lanjingdejia.com/articles/2018/08/13/1534132662997.html 从定时任务说起 自然界中定时任务无处不在,太阳每天东升西落,候鸟的迁徙,树木的年轮,人们每天按时上班,每个月按时发工资、交房租,四季轮换,潮涨潮落,等等,从某种意义上说,都可以认为是定时任务。 大概很少有人想过,这些“定时”是怎样做到的。当然,计算机...

xinzhongtianxia的博客 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[Online zuozuo]阵列算法思考

>通过什么实现 ● Token(理解为某个对象本身的属性,他会根据自身的变化而自动更新自己的Token) ● 编码 ● 集合 >过程 需要实现什么:通过用户的输入获得一个矩形区域,在该矩形局域内以左上角为原点...

chizuanduo9634的博客 433

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

简单的算法问题15——最大子阵列

简单的算法问题15——最大子阵列 所有算法均是用C++编写 所有题目均是来自计蒜客 题目 在一个数组中找出和最大的连续几个数。(至少包含一个数) 例如: 数组A[] = [−2, 1, −3, 4, −1, 2, 1, −5, 4],则连续的子序列[4,−1,2,1]有最大的和6. 输入格式 第一行输入一个不超过1000的整数n。 第二行输入n个整数A[i]。 ...

对方正在输入中... 598

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 192

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 217

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 332

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 387

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析

蓝桥杯报名正在火热进行(软件赛报名 2026-10-08—12-18,省赛 2027-04-10),电子学会 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名也已开启(9/23—12/2),全国青少年信息素养大赛算法应用主题赛同步推进——把 LCA 这个模板练熟,正是冲刺这些赛事树型考点的关键一步。所谓「最近公共祖先」:在一棵以某个节点为根的树里,两个节点 u、v 向上追溯,最早交汇的那个祖先就叫它们的 LCA。比如家谱里,你和你表哥最近的共同长辈就是你们的祖父。

IT_Scratch的博客 532

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 376

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 341

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 300

C++ 运行时多态与虚函数机制全面剖析【面试重点】

构成C++ 运行时多态必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且派生类必须对该虚函数完成重写/覆盖(Override)。只有基类的指针或引用才能既指向基类对象,又指向派生类对象(切片机制);而只有完成了虚函数重写,派生类与基类才具备不同的函数行为,达到“指向谁就调用谁”的效果。在类成员函数的前面加上virtual关键字修饰,该成员函数就成为了虚函数。public:// 成员函数前加 virtual 修饰,声明为虚函数。

Fuyo_0209的博客 435
上一篇: C++静态成员函数和非静态成员函数之间的相互调用
下一篇: 【RS232通信协议】
越甲八千
博客等级 码龄11年 2953粉丝 553原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值