给定二维平面中的点P和直线方程,任务是找到从P到直线的垂直线的底角。
注意:直线方程的形式为ax + by + c = 0。
例子:
Input : P=(1, 0), a = -1, b = 1, c = 0
Output : Q = (0.5, 0.5)
The foot of perpendicular from point (1, 0)
to line -x + y = 0 is (0.5, 0.5)
Input : P=(3, 3), a = 0, b = 1, c = -2
Output : Q = (3, 2)
The foot of perpendicular from point (3, 3)
to line y-2 = 0 is (3, 2)
由于线的方程式为ax + x + c = 0的形式。穿过P且垂直于直线的线方程。因此,通过P和Q的线方程变为ay – bx + d = 0 。另外,P穿过穿过P和Q的线,因此我们将P的坐标放在上式中:
ay1 - bx1 + d = 0
or, d = bx1 - ay1
同样,Q是给定线与穿过P和Q的线的交点。因此,我们可以找到以下解决方案:
ax + by + c = 0
and,
ay - bx + (bx1-ay1) = 0
由于a,b,c,d都是已知的,因此我们可以在此处找到x和y:
以下是上述方法的实现:
C++
// C++ program for implementation of
// the above approach
#include
using namespace std;
// Function to find foot of perpendicular from
// a point in 2 D plane to a Line
pair findFoot(double a, double b, double c,
double x1, double y1)
{
double temp = -1 * (a * x1 + b * y1 + c) / (a * a + b * b);
double x = temp * a + x1;
double y = temp * b + y1;
return make_pair(x, y);
}
// Driver Code
int main()
{
// Equation of line is
// ax + by + c = 0
double a = 0.0;
double b = 1.0;
double c = -2;
// Coordinates of point p(x1, y1).
double x1 = 3.0;
double y1 = 3.0;
pair foot = findFoot(a, b, c, x1, y1);
cout << foot.first << " " << foot.second;
return 0;
}
Java
import javafx.util.Pair;
// Java program for implementation of
// the above approach
class GFG
{
// Function to find foot of perpendicular from
// a point in 2 D plane to a Line
static Pair findFoot(double a, double b, double c,
double x1, double y1)
{
double temp = -1 * (a * x1 + b * y1 + c) / (a * a + b * b);
double x = temp * a + x1;
double y = temp * b + y1;
return new Pair(x, y);
}
// Driver Code
public static void main(String[] args)
{
// Equation of line is
// ax + by + c = 0
double a = 0.0;
double b = 1.0;
double c = -2;
// Coordinates of point p(x1, y1).
double x1 = 3.0;
double y1 = 3.0;
Pair foot = findFoot(a, b, c, x1, y1);
System.out.println(foot.getKey() + " " + foot.getValue());
}
}
// This code contributed by Rajput-Ji
Python3
# Python3 implementation of the approach
# Function to find foot of perpendicular
# from a point in 2 D plane to a Line
def findFoot(a, b, c, x1, y1):
temp = (-1 * (a * x1 + b * y1 + c) //
(a * a + b * b))
x = temp * a + x1
y = temp * b + y1
return (x, y)
# Driver Code
if __name__ == "__main__":
# Equation of line is
# ax + by + c = 0
a, b, c = 0.0, 1.0, -2
# Coordinates of point p(x1, y1).
x1, y1 = 3.0, 3.0
foot = findFoot(a, b, c, x1, y1)
print(int(foot[0]), int(foot[1]))
# This code is contributed
# by Rituraj Jain
C#
// C# program for implementation of
// the above approach
using System;
class GFG
{
// Pair class
public class Pair
{
public double first,second;
public Pair(double a,double b)
{
first = a;
second = b;
}
}
// Function to find foot of perpendicular from
// a point in 2 D plane to a Line
static Pair findFoot(double a, double b, double c,
double x1, double y1)
{
double temp = -1 * (a * x1 + b * y1 + c) / (a * a + b * b);
double x = temp * a + x1;
double y = temp * b + y1;
return new Pair(x, y);
}
// Driver Code
public static void Main(String []args)
{
// Equation of line is
// ax + by + c = 0
double a = 0.0;
double b = 1.0;
double c = -2;
// Coordinates of point p(x1, y1).
double x1 = 3.0;
double y1 = 3.0;
Pair foot = findFoot(a, b, c, x1, y1);
Console.WriteLine(foot.first + " " + foot.second);
}
}
// This code contributed by Arnab Kundu
PHP
输出:
3 2