C++ 程序寻找通过 2 个点的线(Program to find line passing through 2 Points)

news2024/11/17 16:48:54

         在数学和计算机科学中,找到通过两个点的线的方程是一个基础问题。假设我们有两个点 P1​(x1​,y1​) 和 P2​(x2​,y2​),我们想要找到通过这两个点的直线方程。

直线方程的形式

直线的方程通常表示为 y=mx+b,其中 m 是斜率,b 是 y 轴截距。

计算斜率 m

斜率 m 可以通过以下公式计算:

m=x2​−x1​y2​−y1​​

计算 y 轴截距 b

一旦我们有了斜率 m,我们就可以通过代入一个点的坐标来找到 y 轴截距 b。使用点 P1​(x1​,y1​):

y1​=mx1​+b

解这个方程以找到 b:

b=y1​−mx1​

示例

假设我们有两个点 P1​(2,3) 和 P2​(4,7)。

  1. 计算斜率 m:

m=4−27−3​=24​=2

  1. 计算 y 轴截距 b:

b=3−2×2=3−4=−1

  1. 因此,通过点 P1​ 和 P2​ 的直线方程是:

y=2x−1

下面举例一些示例图片: 

给定坐标平面中的两个点 P 和 Q,求出通过这两个点的直线方程。
这种转换在许多几何算法中非常有用,例如直线交点、求三角形的外心、求三角形的内心等等……

例子: 

输入:P(3, 2) 
        Q(2, 6)
输出:4x + 1y = 14

输入:P(0, 1) 
        Q(2, 4)
输出:3x + -2y = -2

假设给定的两个点分别为 P(x 1 , y 1 ) 和 Q(x 2 , y 2 )。现在,我们找到由这些点形成的直线方程。
任何直线都可以表示为, 
ax + by = c 

假设这两个点满足给定的直线。因此,我们有, 
ax 1 + by 1 = c 
ax 2 + by 2 = c 

我们可以设置以下值,使得所有方程成立,  

a = y 2 - y 1 
b = x 1 - x 2 
c = ax 1 + by 1

这些可以通过首先直接获得斜率,然后找到直线的截距来推导。或者也可以通过以下简单的观察巧妙地推导这些:

推导: 

ax 1 + by 1 = c ...(i) 
ax 2 + by 2 = c ...(ii)
使 (i) 和 (ii) 相等,
ax 1 + by 1 = ax 2 + by 2 
=> a(x 1 - x 2 ) = b(y 2 - y 1 )

因此,为了使 LHS 和 RHS 相等,我们可以简单地得到,
a = (y 2 - y 1 ) 
AND 
b = (x 1 - x 2 )
从而得到,
(y 2 - y 1 )(x 1 - x 2 ) = (x 1 - x 2 )(y 2 - y 1 ) 
AND

将这些值放入 (i) 中,我们得到,
c = ax 1 + by 1 
因此,我们现在有了 a、b 和 c 的值,这意味着我们在坐标平面上有一条线。

编程实现: 

// C++ Implementation to find the line passing
// through two points
#include <iostream>
using namespace std;
 
// This pair is used to store the X and Y
// coordinate of a point respectively
#define pdd pair<double, double>
 
// Function to find the line given two points
void lineFromPoints(pdd P, pdd Q)
{
    double a = Q.second - P.second;
    
    double b = P.first - Q.first;
    
    double c = a * (P.first) + b * (P.second);
 
    if (b < 0) {
        cout << "The line passing through points P and Q "
                "is: "
             << a << "x - " << b << "y = " << c << endl;
    }
    else {
        cout << "The line passing through points P and Q "
                "is: "
             << a << "x + " << b << "y = " << c << endl;
    }
}
 
// Driver code
int main()
{
    pdd P = make_pair(3, 2);
    
    pdd Q = make_pair(2, 6);
    
    lineFromPoints(P, Q);
    
    return 0;
}

输出

经过点 P 和 Q 的直线为:4x + 1y = 14

时间复杂度: O(1)

辅助空间: O(1),因为没有占用额外的空间。

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

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

相关文章

PMP核心知识点—之项目管理基础

知识点1&#xff1a;项目的临时性 项目的临时性是指项目有明确的开始时间和结束时间&#xff0c;但并不能表示项目的周期短&#xff0c;项目的周期从几个月、几年到几十年都有。 知识点2&#xff1a;项目的独特性 独特的产品、服务或成果。 知识点3&#xff1a;项目创造商业价值…

ARCGIS 纸质小班XY坐标转电子要素面

1、准备好excel 坐标 小班号、点位链接的顺序、X、Y 4个缺一不可&#xff0c;需要注意的是&#xff0c;点位顺序的格式最好为数字&#xff0c;若为其他格式可能会出现排序混乱&#xff0c;会以1-9 11-19等字符串的排序连接。 excel文件转为csv才能识别&#xff0c;CSV只能保留第…

错过了游科的黑神话?别急,国内这些公司也在招聘中,都是做3A游戏的,速来!

近日&#xff0c;由游戏科学工作室打造的3A游戏——《黑神话:悟空》&#xff0c;不仅在国内引起了前所未有的关注&#xff0c;在全球范围内也引发了巨大轰动。 游戏玩家们举国欢庆的同时&#xff0c;无数游戏从业者也点燃了对国产3A游戏的憧憬与期待&#xff01; 据说游科在某…

Java 通用代码生成器光,电音之王尝鲜版八,完善数据库自动反射功能和多对多候选功能

Java 通用代码生成器光&#xff0c;电音之王尝鲜版八&#xff0c;完善数据库自动反射功能和多对多候选功能 Java 通用代码生成器光&#xff0c;电音之王尝鲜版八&#xff0c;此版本完善了数据库自动反射功能。完善了多对多候选功能。尝鲜版八在以前的版本上修复了大量缺陷和功…

PDF文件切割,无大小限制

前言 公司让学习一个东西&#xff0c;让写一个学习总结&#xff0c;我想这不是AI的拿手好戏&#xff0c;直接把近100M的PDF喂给他&#xff0c;然后他说吃不下&#xff0c;太大了 小事&#xff0c;那么多在线PDF工具网站&#xff0c;分分钟拆开&#xff0c;然后找了半天也都是…

Java开发笔记-小程序微信支付接入

步骤&#xff1a; 1.注册微信商户&#xff0c;开通小程序支付业务&#xff0c;获得必要接入参数。(Certificate、PrivateKey、merchantId、SerialNumbe、apiV3Key) 2.微信商户号关联小程序(需目标小程序审核) 3.java使用接入参数发起下单&#xff0c;获取下单参数。 4.小程…

新手设计师看一看!2024年PDF转CAD软件TOP4

在现在这个啥都能数字化的时代&#xff0c;文件格式得来回换已经成了我们工作的日常&#xff0c;特别是把PDF转成CAD&#xff0c;对工程师、设计师还有搞建筑的人来说&#xff0c;这事儿特别重要。技术越发展&#xff0c;市面上就出现了好些又快又方便的工具。今天&#xff0c;…

AI+新质生产力,化敌为友的新未来

“新质生产力”是今年的“高频词”。如何将“新质生产力”落到实处&#xff0c;业内纷纷瞄准了同一个关键词&#xff1a;“人工智能”&#xff0c;特别是 “人工智能” &#xff0c;这个小小的""号代表着无限的可能性。人工智能正在成为现代社会的基础设施&#xff0…

便签内容转移新设备攻略

在桌面使用便签软件记录工作和生活中的点点滴滴&#xff0c;已成为许多人的习惯。它不仅能帮助我们捕捉灵感、记录待办事项&#xff0c;还能提醒我们重要的日程安排。然而&#xff0c;随着设备的更新换代或工作地点的变更&#xff0c;我们有时需要将便签内容从一个设备转移到另…

多门店多端平台系统小程序源码

&#x1f525;【健身新纪元】多门店多端分开健身系统&#xff0c;打造你的个性化健身体验&#x1f31f; &#x1f3cb;️‍♀️ 一、告别单一&#xff0c;拥抱多元化健身时代 你还在为找不到合适的健身房而烦恼吗&#xff1f;或是想要随时随地开启健身模式&#xff0c;却受限…

聚水潭ERP集成用友NC(用友NC主供应链)

源系统成集云目标系统 用友NC介绍 用友NC是用友NC产品的全新系列&#xff0c;是面向集团企业的世界级高端管理软件。它以“全球化集团管控、行业化解决方案、全程化电子商务、平台化应用集成”的管理业务理念而设计&#xff0c;采用J2EE架构和先进开放的集团级开发平台UAP&am…

UDS 诊断 - ReadDataByPeriodicIdentifier(按周期性标识符读取数据)(0x2A)服务

UDS 诊断服务系列文章目录 诊断和通信管理功能单元 UDS 诊断 - DiagnosticSessionControl&#xff08;诊断会话控制&#xff09;&#xff08;0x10&#xff09;服务 UDS 诊断 - ECUReset&#xff08;ECU重置&#xff09;&#xff08;0x11&#xff09;服务 UDS 诊断 - SecurityA…

5个网络监控神器,别说老网工藏私不发给你

前言 是2022年度的精选网络工具安利贴&#xff0c;你都看了没&#xff1f; 现在啊&#xff0c;很多企业公司都有不少的网络硬件&#xff0c;而这些网络硬件设备根据不同的功能&#xff0c;会分散在不同的物理位置上。 可能有些网络硬件设备是集中式管理&#xff0c;有些只能…

2024年掏耳勺买什么样的好?四款优良产品推荐,不可错过

21世纪的到来&#xff0c;全民生活品质得到了飞跃进步&#xff0c;大家逐渐开始关注耳道的健康清洁。传统挖耳勺因直径大、材质硬、无法看清耳道等因素&#xff0c;往往很难满足大部分人群的清洁需求&#xff0c;甚至带来不可逆转的伤害。可视挖耳勺的出现&#xff0c;具备可视…

C++第四十弹---从零开始:模拟实现C++中的unordered_set与unordered_map

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1 哈希概念 2 哈希冲突 3 哈希函数 4 哈希冲突解决 4.1 闭散列 4.1.1. 线性探测 4.1.2. 二次探测 4.2 开散列 4.2.1. 开散列概念 4.2.2…

安卓逆向百例十-币coin

typora-root-url: ./pic安卓逆向百例十-币coin 现在售价依旧是99&#xffe5;,计划更新100案例&#xff0c;平均一个案例1块钱&#xff0c;要什么自行车&#xff01; 案例起源&#xff1a; 有位老哥 经过炒币失败后想做一个这种查询接口的app&#xff0c;但是苦于他的资金比…

windows系统搭建WSUS更新服务问题整理

1、连接微软更新服务器时&#xff0c;总是连接失败&#xff0c;采取了指定TLS1.2连接的方法&#xff0c;还是连接失败。 解决方法&#xff1a;当时服务器的操作系统为windows server 2012 R2&#xff0c;将操作系统换成windows server 2016可以解决这个问题。 2、客户端怎么配…

Linux发送邮件:如何配置SMTP服务器发信?

linux发送邮件至多个收件人的方法&#xff1f;如何用Linux命令&#xff1f; 在Linux系统中&#xff0c;邮件发送是一个常见且重要的功能&#xff0c;无论是用于系统监控通知还是日常通信。AokSend将详细介绍如何在Linux环境下配置SMTP服务器&#xff0c;以确保您的邮件发送既高…

探索RAG与Multi-Agent的结合:解决复杂任务的新方法

最近帮企业定制了一个langgraphrag的项目&#xff0c;跟大家简单介绍一下设计架构和具体的应用。如果大家有兴趣&#xff0c;我也可以出一期视频&#xff0c;给大家详细介绍一下。我们会一步步探讨如何构建一个可以控的Agent&#xff0c;以执行RAG任务&#xff0c;并最终展示一…

C#为复杂属性提供下拉式编辑框和弹出式编辑框

一.为属性提供编辑类 弹出式和下拉式是如何实现的呢&#xff0c;这需要为属性提供一个专门的编辑类。.Net为我们提供了一个System.Drawing.Design.UITypeEditor类&#xff0c;它是所有编辑类的基类&#xff0c;从他继承出了诸如ColorEditor、FontEditor的类&#xff0c;因此我们…