文章目录

  • 1. 概述
  • 2. 实现

1. 概述

在实际进行空间几何计算的时候,很难确定直线的方向向量,一般都是知道线段的起点OOO和终点EEE。那么显然方向向量为D=E−OD=E-OD=E−O。这时,根据射线的向量方程,线段上某一点P为:
P=O+tDP=O+tDP=O+tD

很显然,这个t值就确定了线段上PPP的位置。在方向向量由起止点确定,且点在线段内的情况下,t的取值范围为0到1:取值为0时就是起点OOO,取值为1时就是终点EEE。进一步,根据相似三角形原则,如果知道PPP点与起点OOO的距离为d,则t的取值为:
t=dMod(D)t = \frac{d}{Mod(D)}t=Mod(D)d​

其中Mod(D)是向量的模,也就是线段的长度。

2. 实现

具体的C++实现代码如下:

#include <iostream>using namespace std;// 2D Point
struct Vector2d
{public:Vector2d(){}Vector2d(double dx, double dy){x = dx;y = dy;}// 矢量赋值void set(double dx, double dy){x = dx;y = dy;}// 矢量相加Vector2d operator + (const Vector2d& v) const{return Vector2d(x + v.x, y + v.y);}// 矢量相减Vector2d operator - (const Vector2d& v) const{return Vector2d(x - v.x, y - v.y);}//矢量数乘Vector2d Scalar(double c) const{return Vector2d(c*x, c*y);}// 矢量点积double Dot(const Vector2d& v) const{return x * v.x + y * v.y;}//向量的模double Mod() const{return sqrt(x * x + y * y);}double x, y;
};void CalPointFromLineWithDistance(const Vector2d & O, const Vector2d & E, double d, Vector2d& P)
{Vector2d D = E - O;   double t = d / D.Mod();P = O + D.Scalar(t);
}int main()
{Vector2d O(1.0, 2.4);Vector2d E(10.2, 11.5);double d = 5;Vector2d P;CalPointFromLineWithDistance(O, E, d, P);cout << "计算的点为:" << P.x<<'\t' << P.y << '\n'; cout << "验算距离是否为"<<d<<":" <<(P-O).Mod()<< '\n';
}

运行结果如下所示:

已知线段上某点与起点的距离,求该点的坐标相关推荐

  1. java 球面距离_[置顶] C语言实验题:已知地球上两点的经度和纬度求其球面距离...

    要求:地球的平均半径为6371千米,已知地球上两个城市A.B的经度和纬度,编程序求出这两个城市之间的地面距离. 首先,固定两点,a(x1,y1,z1),b(x2,y2,z2). 由空间解析几何及向量知 ...

  2. 【C#】已知圆心上的三点求圆心

    已知圆心上的三点:,, ,求圆心: 把三点坐标圆的方程: 得: 把  展开整理得: 令 ; ; , , ,  求 求 把  移项整理得: 把  移项整理得: 还原代入式子: 整理结果 简化: 其中: ...

  3. 已知直线上两点求其一般式

    已知直线上两点P1 P2,求直线的一般式方程. 已知直线上的两点P1(X1,Y1) P2(X2,Y2), P1 P2两点不重合.求该直线的一般式方程AX+BY+C=0 解当x1=x2时,直线方程为x- ...

  4. 已知空间一点到另外两点直线的距离

    转自:http://www.cnblogs.com/clarkustb/archive/2008/11/04/1326500.html 已知空间一点到另外两点直线的距离 设空间中的三点为M1,M2,M ...

  5. 两点间距离公式计算机,已知两点经纬度,用excel计算两点距离的公式?(转

    已知两点经纬度,用excel计算两点距离的公式?(转 (2008-08-03 17:51:26) 标签: 杂谈 用EXCEL进行高斯投影换算 从经纬度BL换算到高斯平面直角坐标XY(高斯投影正算),或 ...

  6. C++实现已知二叉树前序遍历和中序遍历,求后序遍历

    C++实现已知二叉树前序遍历和中序遍历,求后序遍历 一.基本概念 1.先序遍历(NLR)可以确定二叉树的父子结点: 2.中序遍历(LNR)可以确定二叉树的左右子树: 3.后序遍历(LRN)可以确定二叉 ...

  7. java jts获取线上任意一点到起点的距离

    java jts获取线上任意一点到起点的距离 近期项目要求计算某段公路上一辆车的运行轨迹,通过路上的设备实时获取车辆的经纬度信息并发送到后台接收. 抽象出来就是获取线上任意一点到起点的距离,按照一定每 ...

  8. Java 通过已知点的经纬度,相对角度,距离计算另一点的经纬度

    问题背景:自己在使用高德地图时没有发现通过已知点经纬度,角度,距离计算另一点经纬度的方法,所以只好自己实现了.查询之后发现国内的博客基本都是计算两点距离,计算点到线距离的距离等,有几篇也都是C语言形式 ...

  9. 给定一个二维 0-1 矩阵,其中 1 表示陆地,0 表示海洋,每个位置与上下左右相连。已知矩阵中有且只有两个岛屿,求最少要填海造陆多少个位置才可以将两个岛屿相连。

    给定一个二维 0-1 矩阵,其中 1 表示陆地,0 表示海洋,每个位置与上下左右相连.已知矩阵中有且只有两个岛屿,求最少要填海造陆多少个位置才可以将两个岛屿相连. 输入是一个二维整数数组,输出是一个非 ...

  10. 已知曲线上三点,如何求中间一点的法向量。

    如下图,已知 A.B.C 三个点,求 B 点的 法向量,即(fCosSita, fSinSita),Sita 为 法线按逆时针方向和水平方向的夹角. 先计算线段AB的单位垂线段2,再计算线段BC 的单 ...

最新文章

  1. 【6月活动】投稿换T恤!只要你愿意分享!这件酷炫的T恤就是你的~!!
  2. libsvm2.9数据格式
  3. 成功解决Exception “unhandled ImportError“cannot import name ‘imread‘ from ‘scipy.misc‘
  4. 介绍 Java 平台的 Jazzy:一种新的拼写检查器 API
  5. Dubbo(三)之Spring zookeeper集成
  6. pandas 每一列相加_Python3 numpy amp; pandas 学习笔记
  7. 【JVM】javap命令行分析揭示boolean的本质的虚拟机指令
  8. 15 CT04创建特性程序DUMP解决方法
  9. Command line is too long. Shorten command line for Application or also for Spring Boot default...
  10. JAVA支付宝蚂蚁金服开放平台沙箱
  11. Ubuntu 16.04 快捷键截图
  12. 从贫穷到富有——我的修行之路
  13. python头歌--文件翻转
  14. SAP SHDB(BDC)心得
  15. Information Gain 计算 python实现
  16. 小红书商业生态产品负责人精卫:全面解锁小红书达人营销新玩法
  17. Ubuntu上nc的安装与使用
  18. 学习笔记15--机器人操作系统
  19. js 中国标准时间,时间戳 ,yyyy-mm-dd格式之前相互转换
  20. 风速风向 UV 相互转换

热门文章

  1. Enhancement spot 的实现
  2. kilo meg giga tera peta exa zetta yotta
  3. SecureCRT远程操作linux系统
  4. 用户活跃、留存、流失,终于讲清楚了!
  5. 照片拼图软件:Picture Collage Maker for Mac
  6. nginx代理 域名重定向
  7. java: 不兼容的类型: java.lang.Long无法转换为java.lang.Intege
  8. 对 Python 代码使用的词语标记化器 tokenize,你懂了吗?【Python|标准库|tokenize】
  9. TCP 糊涂窗口综合症
  10. 论文中的 w.r.t. 和 i.e. 是什么意思