向量法求点在直线上的投影

news2024/9/23 7:22:53

已知直线上两点a、b和直线外一点p,求p在直线ab上的投影点。
根据《计算几何之 点在直线上的投影 代码模板与证明》一文中所述,p的投影点p’就是a+ x ⃗ \vec x x (直线的点向式),所以我们只要求出 x ⃗ \vec x x 就能求出p’了。
在这里插入图片描述
x ⃗ \vec x x = t v ⃗ \vec v v ,这个t就是 ∣ x ⃗ \vec x x ∣ 和 ∣ v ⃗ \vec v v ∣ 的比值。假设两个向量的夹角为 θ \theta θ,则有:
t = ∣ x ⃗ ∣ ∣ v ⃗ ∣ = ∣ u ⃗ ∣ ∗ c o s θ ∣ v ⃗ ∣ t=\frac{|\vec x|}{|\vec v|}=\frac{|\vec u|*cos\theta}{|\vec v|} t=v x =v u cosθ
根据向量的知识我们可以知道向量的夹角计算方式为:
c o s θ = u ⃗ ∗ v ⃗ ∣ u ⃗ ∣ ∗ ∣ v ⃗ ∣ cos\theta = \frac{\vec u*\vec v}{|\vec u|*|\vec v|} cosθ=u v u v
因此,t的解算可以优化为:
t = ∣ u ⃗ ∣ ∗ c o s θ ∣ v ⃗ ∣ = ∣ u ⃗ ∣ ∣ v ⃗ ∣ ∗ u ⃗ ∗ v ⃗ ∣ u ⃗ ∣ ∗ ∣ v ⃗ ∣ = u ⃗ ∗ v ⃗ ∣ v ⃗ ∣ 2 t=\frac{|\vec u|*cos\theta}{|\vec v|}=\frac{|\vec u|}{|\vec v|}*\frac{\vec u*\vec v}{|\vec u|*|\vec v|}=\frac{\vec u*\vec v}{|\vec v|^2} t=v u cosθ=v u u v u v =v 2u v
于是乎,我们就可以得到向量 x ⃗ \vec x x :
x ⃗ = t ∗ v ⃗ = u ⃗ ∗ v ⃗ ∗ v ⃗ ∣ v ⃗ ∣ 2 \vec x = t*\vec v = \frac{\vec u*\vec v*\vec v}{|\vec v|^2} x =tv =v 2u v v
由此,我们就可以计算出所需要的向量 x ⃗ \vec x x ,但是某些时候我们只知道向量的一个端点以及它的夹角,是否有更为方便的方式使用上述的式子呢?对于上述式子,我们还可以将其进一步简化。对于向量 v ⃗ \vec v v 而言,其可以简写成:
v ⃗ = ∣ v ⃗ ∣ ∗ e ⃗ \vec v =|\vec v|*\vec e v =v e
其中, e ⃗ \vec e e v ⃗ \vec v v 的单位向量。
因此,向量 x ⃗ \vec x x 也可以写成:
x ⃗ = t ∗ v ⃗ = u ⃗ ∗ e ⃗ ∗ e ⃗ \vec x = t*\vec v = {\vec u*\vec e*\vec e} x =tv =u e e
注意这里的运算方式,前面的 u ⃗ ∗ e ⃗ \vec u*\vec e u e 代表的是向量的点乘,因此得到的是一个具体的数,数再乘以向量最后得到一个新的向量。因此,通过这种方式我们也可以使用这种方式来计算它的投影向量。

因此,对于最开始的问题,关于点p在向量上的投影点,其计算方式可以写为:
p ′ = p + x ⃗ = p + u ⃗ ∗ e ⃗ ∗ e ⃗ p' =p+\vec x = p+{\vec u*\vec e*\vec e} p=p+x =p+u e e
简单的代码实现:

    Vec2f vec;//向量
    Vec2f P;//向量外的点
    Vec2f P_pro;//投影点
    theta = 1.2;//向量的夹角
    vec[0] = 4.3;//向量上的一个点
    vec[1] = 2.2;
    P[0] = 1;
    P[1] = 0;
    Vec2f e;//单位向量
    e[0] = cos(theta);
    e[1] = sin(theta);
    Vec2f u;
    u = P-vec;//向量U,终点减起点
    P_pro = vec+(u.dot(e))*e;

得到的结果如下:
在这里插入图片描述
图中箭头代表的是向量,左侧的紫色球体代表平面上的一点,右下方的紫色球体代表该点在向量上的投影位置。
例如我们修改向量的方向及位置:

    theta = 0.2;//向量的夹角
    vec[0] = 1.3;//向量上的一个点
    vec[1] = 0.2;

则会得到新的位置关系:
在这里插入图片描述
从上述的结果来看原式子的结论应该是没有问题的。

补充知识点:如何判断点在向量的左侧还是右侧?
根据夹角的计算方式:
c o s θ = u ⃗ ∗ v ⃗ ∣ u ⃗ ∣ ∗ ∣ v ⃗ ∣ cos\theta = \frac{\vec u*\vec v}{|\vec u|*|\vec v|} cosθ=u v u v
由于分母为模长,必定为正数,所以角度的正负由分子决定,因此,根据向量的点乘结果即可以判断点在向量的左侧还是右侧。
参考:
计算几何之 点在直线上的投影 代码模板与证明
向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读
Numpy计算给定线段上点的投影位置(x,y)
点在直线的投影坐标 n维向量投影坐标 几何投影坐标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1552463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于单片机的二维码LCD显示控制设计

**单片机设计介绍,基于单片机的二维码LCD显示控制设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的二维码LCD显示控制设计是一个集硬件、软件与通信于一体的综合性项目。此设计的主要目标是实现单片机…

AI新工具 又一个开源大模型DBRX击败GPT3.5;根据音频和图像输入生成会说话、唱歌的动态视频

✨ 1: AniPortrait 腾讯开源:根据音频和图像输入生成会说话、唱歌的动态视频 AniPortrait 是个先进的框架,专门用来生成高质量的、由音频和参考肖像图片驱动的动画。如果你有视频,也可以用来实现面部的再现(Face reenactment&am…

Windows 最佳文件管理器:快速、简单、直观、自由 | 开源日报 No.175

files-community/Files Stars: 30.6k License: MIT Files 是为 Windows 构建的最佳文件管理器应用程序。该项目解决了在 Windows 上进行文件管理时的困难。 它具有以下主要功能和优势: 采用直观设计,使浏览文件变得更加简单支持标签、预览和自定义背景…

面试算法-121-完全二叉树的节点个数

题目 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置…

多源统一视频融合可视指挥调度平台VMS/smarteye系统概述

系统功能 1. 集成了视频监控典型的常用功能,包括录像(本地录像、云端录像(录像计划、下载计划-无线导出)、远程检索回放)、实时预览(PTZ云台操控、轮播、多屏操控等)、地图-轨迹回放、语音对讲…

Convex and Semi-Nonnegative Matrix Factorizations

我们提出了非负矩阵分解(NMF)主题的几种新变体。考虑形式为X FG^T的因子分解,我们关注的是G被限制为包含非负元素的算法,但允许数据矩阵X具有混合符号,从而扩展了NMF方法的适用范围。我们还考虑了基向量F被约束为数据…

win10微软拼音输入法 - bug - 在PATH变量为空的情况下,无法输入中文

文章目录 win10微软拼音输入法 - bug - 在PATH变量为空的情况下,无法输入中文概述笔记实验前提条件100%可以重现 - 无法使用win10拼音输入法输入中文替代的输入法软件备注END win10微软拼音输入法 - bug - 在PATH变量为空的情况下,无法输入中文 概述 在…

docker 部署 gitlab-ce 16.9.1

文章目录 [toc]拉取 gitlab-ce 镜像创建 gitlab-ce 持久化目录启停脚本配置配置 gitlab-ce编辑 gitlab-ce 配置文件重启 gitlab-ce配置 root 密码 设置中文 gitlab/gitlab-ce(需要科学上网) 拉取 gitlab-ce 镜像 docker pull gitlab/gitlab-ce:16.9.1-ce.0查看镜像是不是有 Vo…

Android和IOS应用开发-Flutter应用让屏幕在 app 运行期间保持常亮的方法

文章目录 Flutter应用让屏幕在 app 运行期间保持常亮的方法方法一:使用系统插件方法二:使用 Widgets注意事项 Flutter应用让屏幕在 app 运行期间保持常亮的方法 在 Flutter 开发中,可以使用以下两种方法让屏幕在 app 运行期间保持常亮&#…

c++|string模拟实现

目录 一、string.h 二、string.cpp 三、Test.cpp 对string的各种接口进行一个简易版的模拟实现,在模拟实现完之后对string的底层实现有了进一步的理解,了解大佬的编程写法思路。也算是对string有了一个小总结。 一、string.h 接口的声明。放在.h文件中…

excel中批量插入分页符

excel中批量插入分页符,实现按班级打印学生名单。 1、把学生按照学号、班级排序好。 2、选择班级一列,点击数据-分类汇总。汇总方式选择计数,最后三个全部勾选。汇总结果一定要显示在数据的下发,如果显示在上方,后期…

RabbitMQ3.x之四_RabbitMQ角色说明及创建用户与授权

RabbitMQ3.x之四_角色说明及创建用户与授权 文章目录 RabbitMQ3.x之四_角色说明及创建用户与授权1. 访问和授权1. Tags说明2. 命令行示例 2. 管理界面新建用户及访问授权1. 管理界面新建用户2. 管理界面中的授权说明3. guest用户不能远程登录提示 3. 创建用户1. 基本命令2. 实际…

Unity 实现鼠标左键进行射击

发射脚本实现思路 分析 确定用户交互方式:通过鼠标左键点击发射子弹。确定子弹发射逻辑:每次点击后有一定时间间隔才能再次发射。确定子弹发射源和方向:子弹从枪口(Transform)位置发射,沿枪口方向前进。 变…

2024-3-28 市场情绪强修复

这一轮退潮负反馈都修复了, 艾艾精工 博信股份 安奈尔 永悦科技 大理药业 ,高新发展 也补跌了,收尸队也干活了,情绪不修复不接力得最好写照。这轮周期 宁科生物 已经7板,已经追平了 博信股份7板,看明天溢…

基于单片机产品数量自动计量智能系统设计

**单片机设计介绍,基于单片机产品数量自动计量智能系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机产品数量自动计量智能系统设计是一个融合了单片机技术、传感器技术和自动控制技术的综合性项目。…

【Web应用技术基础】CSS(6)——使用 HTML/CSS 实现 Educoder 顶部导航栏

第一题&#xff1a;使用flex布局实现Educoder顶部导航栏容器布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Educoder</title><script src"https://cdn.staticfile.org/jquery/1.1…

Java与Go:字符串转IP

在本文中&#xff0c;我们将了解如何将简单的对比Java和Go是如何将字符串解析为IP地址。 Java 在Java中&#xff0c;将字符串转换为IP地址最无脑的一个方法&#xff1a; import java.net.InetAddress; import java.net.UnknownHostException;public class Main {public stat…

shell脚本发布docker springboot项目示例

docker、git、Maven、jdk8安装略过。 使git pull或者git push不需要输入密码操作方法 约定&#xff1a; 路径&#xff1a;/opt/springbootdemo&#xff0c; 项目&#xff1a;springbootdemo&#xff0c; 打包&#xff1a;springbootdemo.jar&#xff0c; docker容器名字&#x…

竞赛 python+opencv+深度学习实现二维码识别

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; pythonopencv深度学习实现二维码识别 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 该项目较为新颖&…

武汉星起航跨境电商:破局传统贸易,引领全球商业新风尚

在全球经济格局日新月异的今天&#xff0c;跨境电商以其独特的商业模式和创新的运营理念&#xff0c;正在逐步改变着传统贸易的格局。武汉星起航电子商务有限公司&#xff0c;作为跨境电商领域的领军者&#xff0c;以其前瞻的战略布局和深厚的实战经验&#xff0c;不断推动着行…