📜  找到通过给定点的直线方程

📅  最后修改于: 2022-05-13 01:56:07.316000             🧑  作者: Mango

找到通过给定点的直线方程

给定一个包含平面内 N 个坐标点的数组arr ,任务是检查坐标点是否在一条直线上。如果它们位于一条直线上,则打印Yes以及该线的方程,否则打印No

例子:

方法:这个想法是找到可以使用数组中给定的任何一对点形成的线的方程,如果所有其他点都满足使用这对点形成的线的方程,那么所有这些点在一起形成一条直线。因此,如果所有点都满足直线方程,则打印Yes后跟直线方程,否则打印No

下面是上述方法的实现:

C++
// C++ program for the above approach
 
#include 
using namespace std;
 
// Function to check if a straight line
// can be formed using N points
void isStraightLinePossibleEq(
    vector > arr,
    int n)
{
    // First pair of point (x0, y0)
    int x0 = arr[0].first;
    int y0 = arr[0].second;
 
    // Second pair of point (x1, y1)
    int x1 = arr[1].first;
    int y1 = arr[1].second;
 
    int dx = x1 - x0,
        dy = y1 - y0,
        c = dy * x0 - dx * y0;
 
    // Loop to iterate over the points
    // and check whether they satisfy
    // the equation or not.
    for (int i = 2; i < n; i++) {
        int x = arr[i].first, y = arr[i].second;
        if ((dx * y) - (dy * x) != c) {
            cout << "No";
            return;
        }
    }
    cout << "Yes" << endl;
    cout << dy << "x-" << dx
         << "y=" << c << "\n";
}
 
// Driver Code
int main()
{
    // Array of points
    vector > arr
        = { { 0, 0 }, { 1, 1 }, { 3, 3 }, { 2, 2 } };
    int N = 2;
 
    // Function Call
    isStraightLinePossibleEq(arr, N);
    return 0;
}


Java
// Java program for the above approach
import java.util.*;
 
public class GFG
{
 
// Function to check if a straight line
// can be formed using N points
static void isStraightLinePossibleEq(int arr[][], int n)
{
    // First pair of point (x0, y0)
    int x0 = arr[0][0];
    int y0 = arr[0][1];
 
    // Second pair of point (x1, y1)
    int x1 = arr[1][0];
    int y1 = arr[1][1];
 
    int dx = x1 - x0,
        dy = y1 - y0,
        c = dy * x0 - dx * y0;
 
    // Loop to iterate over the points
    // and check whether they satisfy
    // the equation or not.
    for (int i = 2; i < n; i++) {
        int x = arr[i][0], y = arr[i][1];
        if ((dx * y) - (dy * x) != c) {
            System.out.print("No");
            return;
        }
    }
    System.out.print("Yes" + "\n");
    System.out.print(dy + "x-" + dx
         + "y=" + c + "\n");
}
 
// Driver Code
public static void main(String args[])
{
     
    // Array of points
    int arr[][] = {{ 0, 0 }, { 1, 1 }, { 3, 3 }, { 2, 2 }};
    int N = 2;
 
    // Function Call
    isStraightLinePossibleEq(arr, N);
 
}
}
// This code is contributed by Samim Hossain Mondal.


Python3
# Python code for the above approach
 
# Function to check if a straight line
# can be formed using N points
def isStraightLinePossibleEq(arr, n):
 
    # First pair of point (x0, y0)
    x0 = arr[0][0]
    y0 = arr[0][1]
 
    # Second pair of point (x1, y1)
    x1 = arr[1][0]
    y1 = arr[1][1]
 
    dx = x1 - x0
    dy = y1 - y0
    c = dy * x0 - dx * y0
 
       # Loop to iterate over the points
       # and check whether they satisfy
       # the equation or not.
    for i in range(2, n):
        x = arr[i][0], y = arr[i][1]
        if (dx * y) - (dy * x) != c:
            print("No")
            return
 
    print("Yes")
    print(str(dy)+ "x" +"-" + str(dx)+ "y"+ "="+ str(c))
 
    # Driver Code
 
 
    # Array of points
arr = [[0, 0], [1, 1], [3, 3], [2, 2]]
N = 2
 
# Function Call
isStraightLinePossibleEq(arr, N)
 
# This code is contributed by Potta Lokesh


C#
// C# program for the above approach
using System;
using System.Collections;
using System.Collections.Generic;
 
class GFG
{
 
// Function to check if a straight line
// can be formed using N points
static void isStraightLinePossibleEq(int [,]arr, int n)
{
    // First pair of point (x0, y0)
    int x0 = arr[0, 0];
    int y0 = arr[0, 1];
 
    // Second pair of point (x1, y1)
    int x1 = arr[1, 0];
    int y1 = arr[1, 1];
 
    int dx = x1 - x0,
        dy = y1 - y0,
        c = dy * x0 - dx * y0;
 
    // Loop to iterate over the points
    // and check whether they satisfy
    // the equation or not.
    for (int i = 2; i < n; i++) {
        int x = arr[i, 0], y = arr[i, 1];
        if ((dx * y) - (dy * x) != c) {
            Console.Write("No");
            return;
        }
    }
    Console.Write("Yes" + "\n");
    Console.Write(dy + "x-" + dx
         + "y=" + c + "\n");
}
 
// Driver Code
public static void Main()
{
     
    // Array of points
    int[,] arr = new int[4, 2] {{ 0, 0 }, { 1, 1 }, { 3, 3 }, { 2, 2 }};
    int N = 2;
 
    // Function Call
    isStraightLinePossibleEq(arr, N);
 
}
}
 
// This code is contributed by Samim Hossain Mondal.


Javascript



输出
Yes
1x-1y=0

时间复杂度: O(N)
辅助空间: O(1)