首页 > 编程语言 >C# 程序寻找通过 2 个点的线(Program to find line passing through 2 Points)

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

时间:2024-08-28 10:21:25浏览次数:8  
标签:直线 个点 C# int second Points Pair ax first

          在数学和计算机科学中,找到通过两个点的线的方程是一个基础问题。假设我们有两个点 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
using System;
 
class GFG {
 
    // This pair is used to store the X and Y
    // coordinate of a point respectively
    public class Pair {
        public int first, second;
 
        public Pair(int first, int second)
        {
            this.first = first;
            this.second = second;
        }
    }
 
    // Function to find the line given two points
    static void lineFromPoints(Pair P, Pair Q)
    {
        int a = Q.second - P.second;
        int b = P.first - Q.first;
        int c = a * (P.first) + b * (P.second);
 
        if (b < 0) {
            Console.WriteLine(
                "The line passing through points P and Q is: "
                + a + "x - " + b + "y = " + c);
        }
        else {
            Console.WriteLine(
                "The line passing through points P and Q is: "
                + a + "x + " + b + "y = " + c);
        }
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        Pair P = new Pair(3, 2);
        Pair Q = new Pair(2, 6);
        lineFromPoints(P, Q);
    }
}
 
// This code has been contributed by 29AjayKumar 

输出

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

时间复杂度: O(1)

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

标签:直线,个点,C#,int,second,Points,Pair,ax,first
From: https://blog.csdn.net/hefeng_aspnet/article/details/141057987

相关文章

  • Go使用rocketmq实现简单消息
    注意,当前使用的不是grpc协议生产者packagemainimport( "context" "fmt" "github.com/apache/rocketmq-client-go/v2" "github.com/apache/rocketmq-client-go/v2/primitive" "github.com/apache/rocketmq-client-go/v2/producer&q......
  • Go使用rocketmq实现延迟消息
    生产者packagemainimport( "context" "fmt" "github.com/apache/rocketmq-client-go/v2" "github.com/apache/rocketmq-client-go/v2/primitive" "github.com/apache/rocketmq-client-go/v2/producer" "time&......
  • Review of the BMW ICOM Next
    Here’saquickreviewoftheBMWICOMNextA+B+C,thenewdiagnostictoolmadeinChina:1.PerformanceandBuildQuality:TheICOMNextisnoticeablyfasterthantheolderBMWICOMmodelsandseemstobebetterbuilt.ItcomesequippedwithWi-Fi,whichen......
  • SciTech-Mathmatics-Probability+Statistics: How to Read and Interpret a Regressio
    HowtoReadandInterpretaRegressionTableBYZACHBOBBITTPOSTEDONMARCH20,2019https://www.statology.org/read-interpret-regression-table/Instatistics,regressionisatechniquethatcanbeusedtoanalyzetherelationshipbetweenpredictorvariabl......
  • C++学习随笔——算法题:全排列问题
    算法题:输入一个不存在重复字符的字符串,打印出字符串中字符的全部排列组合。代码实现:#include<iostream>#include<string>#include<vector>#include<algorithm>//std::swapvoidpermute(std::stringstr,intleft,intright){if(left==right){st......
  • rados bench性能测试工具介绍
    radosbench性能测试工具介绍radosbench介绍Ceph包含radosbench命令,用于在RADOS存储群集上执行性能基准测试。命令将执行写入测试,以及两种类型的读测试。在测试读取和写入性能时,--no-cleanup选项非常重要。默认情况下,radosbench命令会删除它写入存储池的对象。保留这......
  • IC 验证环境 README.md
    mba-sim├──benchmark//Board-supportPackage├──docs│└──VerifPlans├──fpga//UVMenvironment│├──corev-dv│└──uvme│├......
  • C++学习随笔——C++STL中binary_search的使用方法
    std::binary_search是C++标准模板库(STL)中的一个算法,用于在有序范围内查找某个值是否存在。它基于二分查找算法,时间复杂度为O(logn)。std::binary_search的基本用法:  boolbinary_search(ForwardIteratorfirst,ForwardIteratorlast,constT&value);first:指......
  • 【C#】【Winform】自定义控件、自定义事件
    https://blog.csdn.net/m0_62366581/article/details/139553373在开发桌面的过程中,有时候自带的控件样式或者功能上可能不一定能够满足我们的所有要求。这时候,我们需要自定义控件。创建类库项目把图标拖放到资源文件中添加用户控件设置样式尺寸修改代码视图其他项目中复用......
  • C++学习随笔——什么是迭代器
    迭代器是C++标准模板库(STL)中用于遍历容器元素的对象或概念。它们提供了一种通用的方式来访问容器中的元素,而不需要了解容器的底层实现。迭代器在设计上类似于指针,但功能更为强大和灵活。 1.迭代器是什么?迭代器是一个抽象概念,它为容器(如vector、list等)提供了一种统......