二维中,若直线上两点q1和q2,输入一个点P1,求P1在直线上的垂点

devtools/2024/9/24 13:21:19/

一、计算过程

        在二维空间中,若给定直线上两点Q1和Q2以及一个点P1,要求出点P1在直线上的垂点,可以通过以下步骤进行:

‌1、判断点P1是否在直线q1-q2上‌:

        首先,需要判断点P1是否位于直线Q1-Q2上。这可以通过计算点P1与直线Q1-Q2的位置关系来实现。如果点P1确实在直线Q1-Q2上,那么垂点就是点P1本身。

2、计算垂点的坐标‌:

        如果点P1不在直线Q1-Q2上,则需要计算垂点的坐标。这可以通过以下步骤完成。

 2.1 确定直线的斜率。

        如果直线Q1-Q2不平行于x轴(即斜率存在)。

2.2 计算垂线的斜率。

        垂线的斜率是原直线斜率的负倒数。

        利用点到直线的距离公式,结合垂线的斜率,可以计算出垂足的坐标。具体公式可参考下图。

判断垂点是否在线段上‌:

        计算出的垂点可能位于直线段Q1-Q2的延长线上,而不一定在线段上。因此,还需要进一步判断该点是否在线段Q1-Q2上。这可以通过比较垂点的坐标与线段端点的坐标来实现。  

综上所述,求解点P1在直线Q1-Q2上的垂点涉及多个步骤,包括判断点P1是否在直线上、计算垂点的坐标以及判断垂点是否在线段上。这些步骤共同构成了求解问题的完整过程‌。

二、代码过程

using System;  
using System.Numerics;  class Program  
{  static void Main()  {  // 定义 Q1, Q2 和 P1  Vector2 Q1 = new Vector2(1, 2);  Vector2 Q2 = new Vector2(4, 6);  Vector2 P1 = new Vector2(3, 3);  // 判断 P1 是否在 Q1-Q2 直线上  Vector2 direction = Q2 - Q1;  Vector2 P1ToQ1 = P1 - Q1;  // 计算叉积  float crossProduct = direction.X * P1ToQ1.Y - direction.Y * P1ToQ1.X;  if (Math.Abs(crossProduct) < 1e-6) // 判断 P1 是否在直线上  {  Console.WriteLine($"P1 在直线上的垂点就是 P1:({P1.X}, {P1.Y})");  }  else  {  // 如果不在直线上,计算垂点  float L = direction.Length();  Vector2 unitDirection = direction / L;  // 计算投影长度  float projectionLength = Vector2.Dot(P1ToQ1, unitDirection);  // 计算垂点  Vector2 footPoint = Q1 + projectionLength * unitDirection;  Console.WriteLine($"P1 在直线上的垂点为:({footPoint.X}, {footPoint.Y})");  }  }  
}

综合以上。

更多学习内容,可关注公众号:


http://www.ppmy.cn/devtools/98509.html

相关文章

32 - I. 从上到下打印二叉树

comments: true difficulty: 中等 edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9832%20-%20I.%20%E4%BB%8E%E4%B8%8A%E5%88%B0%E4%B8%8B%E6%89%93%E5%8D%B0%E4%BA%8C%E5%8F%89%E6%A0%91/README.md 面试题 32 - I. 从上到下打印二叉树…

前端(Vue)headerSearch(页面搜索)通用解决方案 及 原理

简介 击后弹出输入框输入框可以输入页面的索引&#xff0c;比如项目中包含了文章相关的点击后可以进入对应界面同时也支持英文索引 原理 headerSearch 是复杂后台系统中非常常见的一个功能&#xff0c;它可以&#xff1a;在指定搜索框中对当前应用中所有页面进行检索&#…

【大模型微调训练与实操】微调 Llama 3 并在本地使用

目标&#xff1a;根据医患对话数据集对 Llama 3 进行微调&#xff0c;创建一个专门针对医疗对话的模型。在合并、转换和量化模型后&#xff0c;它将可以通过 Jan 应用程序供本地私人使用。 在本教程中&#xff0c;我们将学习如何在医学数据集上微调 Llama 3。我们还将通过 Ja…

算法基础及例题

1、双指针 维护区间信息、子序列匹配、利用序列有序性、单项链表找环双指针 - OI Wiki (oi-wiki.org) 盛最多水的容器https://leetcode.cn/problems/container-with-most-water/ public class Solution {public int maxArea(int[] height) {int l 0, r height.length - 1;int…

如何制作统信UOS启动盘?

如何制作统信UOS启动盘&#xff1f; 一、下载UOS系统安装镜像二、在UOS系统环境下制作启动盘步骤一&#xff1a;准备U盘步骤二&#xff1a;打开启动盘制作工具步骤三&#xff1a;选择ISO镜像文件步骤四&#xff1a;选择安装介质并格式化步骤五&#xff1a;等待制作完成 三、在W…

算法-(383哈希表赎金信)

这道题可以利用哈希表来做。我们首先来了解以下哈希表 哈希表是一种强大的数据结构&#xff0c;因为它能够在平均情况下提供常数时间复杂度的查找、插入和删除操作。这使得它在实现字典、集合以及缓存等场景中非常高效。 主要特点 快速查找&#xff1a;通过哈希函数将键映射到…

Git 的基本概念和使用方式

Git是一种分布式版本控制系统&#xff0c;用于跟踪文件的更改并协同多人开发项目。它具有以下基本概念和使用方式&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git使用仓库来存储项目的文件和历史记录。仓库可以是本地的&#xff08;在本地计算机上&#x…

T/CECS 10035-2019 绿色建材评价 金属复合装饰材料

一、绿色建材 绿色建材是指在全生命周期内减少对天然资源消耗和减轻对生态环境影响&#xff0c;具有节能、减排、安全、便利和可循环的建材产品&#xff0c;获得绿色产品证书的产品在实际招投标以及品牌宣传中具有绝对优势。 二、认证模式 初始工厂检查产品抽样检验获证后监督…