三维空间中关于点线面的计算

原创 2014年07月12日 18:14:45

1. 三维空间中两点间的距离

    设两点为 P1(x1,y1,z1), P2(x2,y2,z2), 则两点间的距离为:

float distance=CalTwoPointDistance(x1,y1,z1,x2,y2,z2);
float CalTwoPointDistance(float x1,float y1,float z1,float x2,float y2,float z2)
{
	float distance=0.0f;
	distance=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));
	return distance;
}

2. 三维空间有向线段与坐标轴的夹角

    设两点为 P1(x1,y1,z1), P2(x2,y2,z2), 则由P1指向P2的有向线段P1P2与X轴的夹角为:

float angle=CalLineToXAngle(x1,y1,z1,x2,y2,z2);
float CMesh::CalLineToXAngle(float x1,float y1,float z1,float x2,float y2,float z2)//1->2
{
	if ((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)==0)
	{
		return 0.0f;
	}
	float linevector[3]={x2-x1,y2-y1,z2-z1};
	float linex[3]={1.0f,0.0f,0.0f};
	float cosangle=(x2-x1)/sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1));
	if (cosangle<-1||cosangle>1)
	{
		ASSERT(1);
	}
	//
	float langle=acos(cosangle);
	//
	float angle=langle*180.0f/PI;
	if (angle<0||angle>180)
	{
		ASSERT(1);
	}
	return angle;
}

其算法思想就是计算P1P2向量与X轴向量的数量积,然后除以两向量的模长即为两向量的夹角余弦值。

\cos{\theta} = \frac{\mathbf{a \cdot b}}{|\vec{a}| \, |\vec{b}|}

3.三维空间中平面的法向量计算

参考我的博客文章:

http://blog.csdn.net/u011442652/article/details/37727977

4. 三维空间中平面与直线的交点

    其原理参考博客:http://blog.csdn.net/abcjennifer/article/details/6688080

bool CalPlaneLineIntersectPoint(float *planeNVector, float *planePoint, float *lineVector, float *linePoint,
								float &resultx,float &resulty,float &resultz)  
{  
	float vp1, vp2, vp3, n1, n2, n3, v1, v2, v3, m1, m2, m3, t,vpt;  
	vp1 = planeNVector[0];  
	vp2 = planeNVector[1];  
	vp3 = planeNVector[2];  
	n1 = planePoint[0];  
	n2 = planePoint[1];  
	n3 = planePoint[2];  
	v1 = lineVector[0];  
	v2 = lineVector[1];  
	v3 = lineVector[2];  
	m1 = linePoint[0];  
	m2 = linePoint[1];  
	m3 = linePoint[2];  
	vpt = v1 * vp1 + v2 * vp2 + v3 * vp3;  //法向量跟直线向量的数量积
	//首先判断直线是否与平面平行  
	if (vpt == 0)  
	{  
		return false;
	}  
	else  
	{  
		t = ((n1 - m1) * vp1 + (n2 - m2) * vp2 + (n3 - m3) * vp3) / vpt;  
		resultx = m1 + v1 * t;  
		resulty = m2 + v2 * t;  
		resultz = m3 + v3 * t;  
	}  
	//
	return true;  
}  






OPENCV 两点之间的操作

#include #include #include #include "cxcore.h" #include #include using namespace std; ...
  • u012767067
  • u012767067
  • 2014-02-18 11:22:11
  • 7485

计算几何算法--点线面相关算法--目录

计算几何算法(含源代码) ㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 3. 矢量叉乘 1 4. 矢量点乘 2 5. 判断点是否在线段上 2 6...
  • xiaoniba1024
  • xiaoniba1024
  • 2012-02-17 20:18:10
  • 1113

三维空间——点线面关系

最基础最重要的概念——叉积,说到叉积就要聊聊行列式。 行列式的代数意义与Cramer法则联系密切,先来个简单的例子, 消除x2得到这样的结果: .    行列式 正是那个分母,其计算和叉积一样。 ...
  • theArcticOcean
  • theArcticOcean
  • 2016-01-31 22:35:12
  • 1098

三维空间两直线/线段最短距离、线段计算算法

三维空间直线距离计算
  • u011511587
  • u011511587
  • 2016-07-29 13:46:41
  • 2660

2016年前端技术观察

前端技术,从最初的刀耕火种到现在的百花齐放、繁花迷眼,可以说达到了一个前所未有的鼎盛时期。当身边的同事张口闭口都是所谓H5的时候,作为一名前端开发者的我心中越来越多的却是迷惑和不解。 我并不完全赞同这...
  • hwhsong
  • hwhsong
  • 2016-12-14 14:58:31
  • 3340

2016年前端技术观察

作者:曹刘阳,网名阿当,资深Web技术专家,必杀技“前端开发、软件架构和敏捷开发”。先后任职于雅虎、淘宝、新浪企业。在“如何编写高质量代码”领域研究颇深,《编写高质量代码——Web前端开发修炼之道》作...
  • weixin_36672614
  • weixin_36672614
  • 2017-02-15 17:19:47
  • 108

三维空间中的平面

三维空间中的平面本文主要复习高中几何中的平面方程如何定义三维空间中的平面 三维空间中的平面由两个量确定: ① 一个法向量(垂直于该平面的向量) ② 一个已知点(位于该平面上的一个点) ...
  • tina_ttl
  • tina_ttl
  • 2016-05-03 16:39:05
  • 2027

三维空间中平面的法向量计算

 三维空间中平面的法向量      取平面上三点分别为: P1(x1,y1,z1), P2(x2,y2,z2), P3(x3,y3,z3), 设法向量为(dx,dy,dz), 则法向量满足以下...
  • u011442652
  • u011442652
  • 2014-07-12 18:04:17
  • 5509

计算机图形学 点线面的算法

  • 2009年12月18日 19:30
  • 1KB
  • 下载
收藏助手
不良信息举报
您举报文章:三维空间中关于点线面的计算
举报原因:
原因补充:

(最多只允许输入30个字)