空间点到直线垂足坐标的解算及C++实现

2023-11-13

假设空间某点O的坐标为(Xo,Yo,Zo),空间某条直线上两点A和B的坐标为:(X1,Y1,Z1),(X2,Y2,Z2),设点O在直线AB上的垂足为点N,坐标为(Xn,Yn,Zn)。点N坐标解算过程如下:

首先求出下列向量:

   

由向量垂直关系:

       

上式记为(1)式。

   点N在直线AB上,根据向量共线:

      (2)

  由(2)得:

    (3)

   把(3)式代入(1)式,式中只有一个未知数k,整理化简解出k:

     (4)
   把(4)式代入(3)式即得到垂足N的坐标。

// 二维空间点到直线的垂足
struct Point
{
  double x,y;
}
Point GetFootOfPerpendicular(
    const Point &pt,     // 直线外一点
    const Point &begin,  // 直线开始点
    const Point &end)   // 直线结束点
{
    Point retVal;

    double dx = begin.x - end.x;
    double dy = begin.y - end.y;
    if(abs(dx) < 0.00000001 && abs(dy) < 0.00000001 )
    {
        retVal = begin;
        return retVal;
    }

    double u = (pt.x - begin.x)*(begin.x - end.x) +
        (pt.y - begin.y)*(begin.y - end.y);
    u = u/((dx*dx)+(dy*dy));

    retVal.x = begin.x + u*dx;
    retVal.y = begin.y + u*dy;

    return retVal;

}

// 三维空间点到直线的垂足
struct Point
{
  double x,y,z;
}
Point GetFootOfPerpendicular(
    const Point &pt,     // 直线外一点
    const Point &begin,  // 直线开始点
    const Point &end)   // 直线结束点
{
    Point retVal;

    double dx = begin.x - end.x;
    double dy = begin.y - end.y;
  double dz = begin.z - end.z;
    if(abs(dx) < 0.00000001 && abs(dy) < 0.00000001 && abs(dz) < 0.00000001 )
    {
        retVal = begin;
        return retVal;
    }

    double u = (pt.x - begin.x)*(begin.x - end.x) +
        (pt.y - begin.y)*(begin.y - end.y) + (pt.z - begin.z)*(begin.z - end.z);
    u = u/((dx*dx)+(dy*dy)+(dz*dz));

    retVal.x = begin.x + u*dx;
    retVal.y = begin.y + u*dy;
  retVal.z = begin.z + u*dz;
  
    return retVal;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

空间点到直线垂足坐标的解算及C++实现 的相关文章

  • 阿里开源FASTJSON2,为FASTJSON重构升级,目标是为下一个十年提供一个高性能的JSON库

    大厂杂谈关注到阿里最近开源了fastjson2 推出几天已经获得500多的star FASTJSON2是FASTJSON项目的重要升级 目标是为下一个十年提供一个高性能的JSON库 持JSON JSONB两种协议 JSONPath是一等公民
  • 代码质量保障第2讲:单元测试 - 浅谈单元测试

    代码质量保障第2讲 单元测试 浅谈单元测试 本文是代码质量保障第2讲 浅谈单元测试 单元测试 unit testing 是指对软件中的最小可测试单元进行检查和验证 这是基础 所以围绕着单元测试 我从网上搜集和总结了相关的概念 以助你完善体系
  • 「OKR 理论篇」5 分钟快速掌握 OKR 管理法

    近几年在企业管理领域有一个很火的词 OKR 它发源于英特尔 兴盛于Google 随着字节跳动等互联网新贵的迅速崛起 引起了越来越多创新企业的关注 然而 对大部分公司而言 他们并没有完全理解 OKR 理念 往往将 OKR 与绩效考核等同起来
  • 用朴素贝叶斯做垃圾邮件分类&demo

    贝叶斯公式 全概公式 思路和实现 最终的目标 对于一封邮件 分词得到 我们需要求出给定的条件下 这封邮件是垃圾邮件的概率 即求出 这里s表示是垃圾邮件 spam 根据贝叶斯公式 根据全概公式 上式 这里n表示是正常邮件 noraml 令先验
  • 分布式应用:Zabbix代理服务器与SNMP监控

    目录 一 理论 1 分布式监控 2 Zabbix代理服务器部署 3 配置 agent 使用 proxy 4 设置 Zabbix SNMP 监控 二 实验 1 Zabbix代理服务器部署 2 配置 agent 使用 proxy 3 设置 Za
  • 多线程与高并发--------线程

    一 线程的基础概念 一 基础概念 1 1 进程与线程 什么是进程 进程是指运行中的程序 比如我们使用钉钉 浏览器 需要启动这个程序 操作系统会给这个程序分配一定的资源 占用内存资源 什么线程 线程是CPU调度的基本单位 每个线程执行的都是某
  • Linux下七种文件类型、文件属性及其查看方法

    1 七种文件类型 普通文件类型 Linux中最多的一种文件类型 包括 纯文本文件 ASCII 二进制文件 binary 数据格式的文件 data 各种压缩文件 第一个属性为 目录文件 就是目录 能用 cd 命令进入的 第一个属性为 d 例如
  • C++ 函数模板(template)详解

    目录 1 前言 2 为什么要使用函数模板 3 函数模板语法 3 1函数模板定义形式 4 函数模板和函数重载 4 1函数模板无法隐式数据类型转换 4 2当函数模板和普通函数都符合调用时 优先选择普通函数 4 3如果函数模板会产生更好的匹配 使
  • 【网络编程·应用层】https协议——加密与窃密的攻防战

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 https协议的介绍 二 加密和解密 1 加密和解密的
  • 详解Git合并冲突——问题重现、原因及解决 “Automatic merge failed; fix conflicts and then commit the result.“

    最后更新日期 2022 10 6 在Git中使用git merge命令合并两个分支的时候 有可能产生这种情况 git merge A Auto merging merge txt CONFLICT content Merge conflic
  • 什么是 tokens,ChatGPT里面的Tokens如何计数?

    什么是 tokens ChatGPT里面的Tokens如何计数 什么是 tokens Tokens 可以被认为是词语的片段 在 API 处理提示之前 输入会被分解成 tokens 这些 tokens 并不会精确地在单词的开始或结束处切分 t
  • 机器人操作系统ROS(一)

    锋影 email 174176320 qq com 如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 本篇文章主要是初步介绍ROS的基本知识以及安装等内容 一 ROS简介 ROS是啥 ROS
  • MVC 向页面传值方式总结

    总结发现ASP NET MVC中Controller向View传值的方式共有6种 分别是 ViewBag ViewData TempData 向普通View页面传一个Model对象 向强类型页面传传一个Model对象 用一个ViewMode
  • 如何用Java将DWG和DXF文件转换为PDF?看了这篇就懂了

    CAD文件格式是设计师或建筑师在建筑 汽车 五金等各行各业制作图纸时使用的 DWG和DXF是最广泛使用的CAD格式 然而 你需要一个专门的软件来查看DWG和DXF文件中的内容 为了解决这个限制 你可以将CAD图纸转换为PDF格式 Aspos
  • python从入门到精通,帮你们整理了学习路线【都是干货,建议收藏】

    前言 你多学一门本事 你就少向别人低头哈腰一次 毫无疑问 Python 是当下最火的编程语言之一 对于许多新手小白来讲 深入地了解掌握 Python 看似是一件十分困难的事 事实上 只要掌握了科学的学习方法并制定了系统的学习计划 Pytho
  • 拓展模块使用教程和心得(二):2.4G通信模块nRF24L01及周边知识

    成就更好的自己 课设用到了nRF24L01模块 设计和调试前后出现一些问题 开一篇博客说一下理论方面和使用中的问题 目录 元件介绍 工作模式及理论知识 与MCU通信方式 SPI通信 nRF24L01之间的无线通信 细枝末节知识点 一对一通信
  • Exception in thread "main" java.net.BindException: Address already in use: JVM_Bind

    出现上面的错误 说明使用的该端口被占用了 解决方法 1 如果该Java程序被运行过一次了并且成功了 说明上一次运行后程序没有退出 如下图第一次运行的没有退出 将其退出 再次运行即可 2 如果不是第一个情况 那就找占用该端口的进程 结束掉进程
  • 基于CNN的性别、年龄识别

    原文地址 http blog csdn NET hjimce article details 49255013 作者 hjimce 一 相关理论 本篇博文主要讲解2015年一篇paper Age and Gender Classificat
  • Ozone基于Block level的EC方案设计

    文章目录 前言 Ozone EC概述 基于CGI的EC block数据的读写 参考资料 前言 在之前文章中 笔者写过一篇关于Ozone EC方案设计的文章 Ozone的Erasure Coding方案设计 不过当时那篇文章讨论的EC设计方案
  • pytorch第七课-制作训练数据集

    在学习了一系列使用pytorch进行训练的方法之后 我们有一个很重要的点需要注意 就是如何制作自己的数据集 在前面的例子中 我们主要集中于pytorch在算法上的使用 数据集基本都是pytorch提供的 或者是用 data ImageFol

随机推荐

  • Python爬取前五页内容并保存访问每个视频内容数据-保存文件夹

    import requests from lxml import etree def text create name msg try desktop path D test 新创建的txt文件的存放路径 full path desktop
  • 华为harmonyos 2.0,连接无限可能,华为HarmonyOS 2.0 正式发布

    2020年9月10日 华为消费者业务软件部总裁王成录又一次站在了松山湖华为开发者大会的主舞台上 今年 他带来了万众瞩目的华为鸿蒙HarmonyOS 2 0 此次HarmonyOS的升级 不仅仅带来了分布式能力的全面提升 还为开发者提供了完整
  • 网络安全实验室

    网络安全实验室 网络信息安全 基础关 一 key在哪里 分值 100 过关地址 答 在火狐中开启代理 打开burpsuite 点击过关地址进行抓包 抓到的包如下 右击发送给repiter 点击go就行了 二 再加密一次你就得到key啦 分值
  • GeForce Experience 绕过登录与禁止自动更新

    本文说明了 如何在未注册Nvidia账户的情况下 绕过GeForce Experience 以下简称为GFE 账户登录的方法 从而直接使用登陆后才能使用的各种功能 在PC未联网的情况下 此方法依旧能正常绕过登录 直接进入GFE主界面 还说明
  • 交叉编译工具链(arm-linux-gcc)使用测试

    在使用之前 需要先安装交叉编译工具链 arm linux gcc 这里仅提供一个参考链接 不作叙述 参考链接 1条消息 Ubuntu 18 04安装arm linux gcc交叉编译器 超简单 附安装包下载地址 安装交叉编译器 难搞哦 的博
  • mysql sync_binlog 作用_mysql 中 sync_binlog 参数作用

    sync binlog 这个参数是对于MySQL系统来说是至关重要的 他不仅影响到Binlog对MySQL所带来的性能损耗 而且还影响到MySQL中数据的完整性 对于 sync binlog 参数的各种设置的说明如下 sync binlog
  • Slow Changing Dimension

    Type 4 Mini Dimension 解决维度中的某些属性变化频繁的问题 例如Cusotmer中的年龄 收入 购买频率等属性 优点 1 节省存储空间 2 不需要频繁的对维度的属性进行更改 实例 摘自Kimball的书 Note 在插入
  • 【对象存储】那些事

    最近在某个项目中使用了对象存储 以前看过一个新闻 某公司的对象存储被盗刷 一夜之间账户欠费几十万 我们这点小买卖可经不起这么折腾 所以下功夫研究了下 防患于未然 说到防盗刷 我们还得了解对象存储是如何计费的 本文针对这2个问题进行阐述 对象
  • 前端常用的优化技巧

    前端优化 前端的性能优化是比较重要的一个版块内容 适当的优化可以提升网站的性能 而前端优化有很多方面 我们来慢慢了解 但是不是所有的优化都是适合你当前的项目的 看你项目的需求 来选择适合的方法 调试工具 我们经常使用的就是浏览器的控制台来查
  • B站小甲鱼python学习笔记

    000 愉快的开始 视频地址 https www bilibili com video BV1xs411Q799 p 1 python跨平台 应用范围 操作系统 WEB 3D动画 企业应用 云计算 大家可以学到什么 Python3的所有常用
  • 找最大最小整数(python3)

    问题描述 编写一个程序 用户输入若干整数 试找出其中的最大数和最小数 输入形式 用户在第一行待输入数据个数 在第二行输入数据 输出形式 程序在下一行输出数据的最大值和最小值 样例输入 5 89 62 96 74 52 样例输出 96 52
  • 在SpringBoot项目中添加logback的MDC

    先看下MDC是什么 Mapped Diagnostic Context 用于打LOG时跟踪一个 会话 一个 事务 举例 有一个web controller 在同一时间可能收到来自多个客户端的请求 如果一个请求发生了错误 我们要跟踪这个请求从
  • Visual Studio Code 快捷键汇总

    Visual Studio Code 快捷键汇总 按ctrl shift p 然后输入 keyboard 然后选择用户快捷键文件 将键绑定放在此文件中以覆盖默认值 key ctrl y command editor action delet
  • Nginx 安装

    文章目录 安装 openresty 编译 nginx 开始编译 附录 源代码目录结构说明 编译目标 prefix 目录结构 安装 https nginx org 官网 CHANGES 查看版本的修改 2015 年发布版本 支持了 Strea
  • 解决keil文件用vscode打开乱码

    打开用户设置 输入encoding 勾选Auto Guess Encoding 如图 就可以自动识别文件的编码了 这样打开GBK和UTF8编码的带中文的文件 就不用手动切换编码了 在vscode文件中可以设置自动保存 你就不用手动ctrl
  • SpringBoot系列之二 关于JSON使用的那点事儿

    一 使用JSON 1 使用SpringBoot 中的Controller如果返回对象 返回到前端的数据默认为JSON RequestMapping getPerson public Person getPerson Person perso
  • Oracle跨库访问DBLINK

    1 DBLINK的介绍 Oracle在进行跨库访问时 可以创建DBLINK实现 比如要将UAT的表数据灌入开发环境 则可以使用UAT库为数据源 通过DBLINK实现将查出的数据灌入开发库 简而言之就是在当前数据库中访问另一个数据库中的表中的
  • python的后端库_【后端开发】python库是什么

    初学python的小伙伴一定遇到这样一个问题 python模块 python包 python库 感觉被绕晕了 今天说一说python中的模块 库 包有什么区别 1 python模块是 python模块 包含并且有组织的代码片段为模块 表现形
  • 2014年终总结——-我的匆匆这一年(面试,毕业季,工作)

    看看自己上一次写博客的时间 到现在已经快有一年了 这一年自己毕业 走上社会 感悟人生 当自己意识到该写今年的年终总结的时候 却发现不知道该从什么地方开始写 该写些什么了 还好 这一年让自己懂得不管什么事 如果已经发生 自己首先最不应该想的就
  • 空间点到直线垂足坐标的解算及C++实现

    假设空间某点O的坐标为 Xo Yo Zo 空间某条直线上两点A和B的坐标为 X1 Y1 Z1 X2 Y2 Z2 设点O在直线AB上的垂足为点N 坐标为 Xn Yn Zn 点N坐标解算过程如下 首先求出下列向量 由向量垂直关系 上式记为 1