求空间点到指定线段的垂点坐标-创新互联
设空间线段的起点A和终点B分别为、,线段AB外一点C(a,b,c),则C点到线段AB的垂点D的坐标求解过程如下:
创新互联建站-专业网站定制、快速模板网站建设、高性价比龙山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式龙山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖龙山地区。费用合理售后完善,十多年实体公司更值得信赖。因垂点D在线段AB上,则有向量关系,由向量仿射知D点坐标可表示为[式1]。
因,则有
整理得:
求出k后,由[式1]可求出D点坐标。
当时,垂点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元起,快前往官网查看详情吧
分享名称:求空间点到指定线段的垂点坐标-创新互联
分享URL:http://azwzsj.com/article/peese.html