求空间点到指定线段的垂点坐标-创新互联
                                            设空间线段的起点A和终点B分别为 、
、 ,线段AB外一点C(a,b,c),则C点到线段AB的垂点D的坐标求解过程如下:
,线段AB外一点C(a,b,c),则C点到线段AB的垂点D的坐标求解过程如下:

因垂点D在线段AB上,则有向量关系 ,由向量仿射知D点坐标可表示为
,由向量仿射知D点坐标可表示为 [式1]。
[式1]。


因 ,则有
,则有


整理得:

求出k后,由[式1]可求出D点坐标。
当 时,垂点D在线段AB上,否则在线段AB外。
时,垂点D在线段AB上,否则在线段AB外。
C++代码如下:
#include "stdafx.h"
class CPoint
{
public:
	CPoint()
	{
		x = 0;
		y = 0;
		z = 0;
	}
	CPoint(double _x, double _y, double _z)
	{
		x = _x;
		y = _y;
		z = _z;
	}
	inline void operator = (const CPoint& p)
	{
		x = p.x;
		y = p.y;
		z = p.z;
	}
	static CPoint getPerpendicularPoint(CPoint start, CPoint end, CPoint pt, double& u)
	{
		CPoint ret;
		double dx = end.x - start.x;
		double dy = end.y - start.y;
		double dz = end.z - start.z;
		double k = (end.x - start.x)*(pt.x - start.x) + (end.y - start.y)*(pt.y - start.y) + (end.z - start.z)*(pt.z - start.z);
		k = k / (dx*dx + dy*dy + dz*dz);
		u = k;
		return CPoint(start.x + k*dx, start.y + k*dy, start.z + k*dz);
	}
public:
	double x;
	double y;
	double z;
};
int _tmain(int argc, _TCHAR* argv[])
{
	double u;
	CPoint x1 = CPoint::getPerpendicularPoint(CPoint(0, 0, 0), CPoint(0,0, 100),CPoint(30,20,30),u);
	return 0;
}你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网站标题:求空间点到指定线段的垂点坐标-创新互联
网页地址:http://www.scyingshan.cn/article/peese.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 