平面度计算

平面度计算

1.求基准面(在基准面上找三点通过公式计算出Ax+By+Cz+D=0这一平面)
在这里插入图片描述
2.在需要计算的面上找三点,通过公式计算出与面的距离D1,D2,D3,对这三个点进行计算以求的最终平面度
在这里插入图片描述

实现

1.求基准面

  1. Test中调用情况(模拟数据输入)
void Test() {
	double array1[3][3] = { { 2.345,1.286,2.369 },{ 3.3847,3.345,3.534 },{ 4,4,4.2 }};
	//定义数组指针指向第一个元素(int[])
	double (*p)[3] = array1;
	double * pABCD=getABCD(p);
	cout<<"基准平面方程为:"<<pABCD[0]<<"X+"<<pABCD[1]<<"Y+"<<pABCD[2]<<"Z+"<<pABCD[3]<<"=0"<<endl;
}
  1. 三点求平面度公式
/*
计算基础面平面公式系数
parms:指向二维数组的指针,其中数组中装着3个点的三维坐标
ret:abcd系数的double数组
*/
double * getABCD(double (*parms)[3] ){
	//定义装载系数ABCD的数组
	double result[4] ;

	result[0] = parms[0][1]*parms[1][2] - parms[0][1] *parms[2][2] - parms[1][1]*parms[0][2] + parms[1][1]* parms[2][2] + parms[2][1]*parms[0][2] - parms[2][1]*parms[1][2];
	result[1] = -parms[0][0]*parms[1][2] + parms[0][0]*parms[2][2] + parms[1][0]*parms[0][2] - parms[1][0]* parms[2][2] - parms[2][0]* parms[0][2] + parms[2][0]* parms[1][2];
	result[2] = parms[0][0]*parms[1][1] - parms[0][0]*parms[2][1] - parms[1][0]*parms[0][1] + parms[1][0]*parms[2][1] + parms[2][0]*parms[0][1] - parms[2][0]*parms[1][1];
	result[3] = parms[0][0]*parms[1][1]*parms[2][2] - parms[0][0] *parms[2][1]*parms[1][2] - parms[1][0]*parms[0][1]*parms[2][2] + parms[2][0]*parms[0][1] *parms[1][2] + parms[1][0]*parms[2][1]*parms[0][2] - parms[2][0]*parms[1][1]*parms[0][2];
	
	//返回
	double *p = result;
	return p
  • 该函数细致的使用了数组指针这一概念,参考

3.运行结果
在这里插入图片描述
但在没有已知基准面的情况下,基准面计算需根据所有模拟输入的点来计算,但目前只随机取三点,结果偶然性极大,下一步会让所有数据参加运算。
当前思路是首先去除无效值,即Z(高度值)为极限值的数据,因为这些数据位置可能处于扫描底版。然后对剩余数据进行分组处理,三个数据点一组,共计(n/3)组。这些数据分别计算基准平面的系数ABCD,最后对ABCD,取平均值。最后即为真正的基准平面。

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值