给定二维平面中的点P和镜面方程,任务是找到由于镜面而形成的该点Q的图像。
镜像方程式为ax + by + c =
例子:
Input : P = (1, 0), a = -1, b = 1, c = 0
Output : Q = (0, 1)
Input : P = (3, 3), a = 0, b = 1, c = -2
Output : Q = (3, 1)
解决方案 :
Let coordinate of P(given point) be (x1, y1)
Let coordinate of Q(image point) be (x2, y2)
Let coordinate of R(point on mirror) be (x3, y3)
由于物体和图像与镜子等距,因此R必须是P和Q的中间点
由于镜像的方程式为:ax + by + c =0。通过P和Q的线的方程式垂直于镜像。因此,穿过P和Q的直线方程变为ay – bx + d = 0,而且P穿过穿过P和Q的直线,因此我们将P的坐标放在上面的方程中,
a * y1 – b * x1 + d = 0
d = b * x1 – a * y1
另外,R是通过P和Q的镜像线的交点。因此我们找到了
ax + by + c = 0
ay -bx + d = 0
由于a,b,c,d都是已知的,因此我们可以在这里找到x和y。由于R的坐标现在是已知的,即x3,y3现在是已知的。
由于R是PQ的中点,
(x3,y3)=((x1 + x2)/ 2,(y1 + y2)/ 2)
由于已知x1,y1,x3,y3,我们得到下面的等式,其中(x,y)是Q(像点)的坐标
我们使用上面的公式来找到点P(x1,y1)相对于方程ax + by + c的镜像
C++
// C++ code to find mirror image
#include
using namespace std;
// C++ function which finds coordinates
// of mirror image.
// This function return a pair of double
pair mirrorImage(
double a, double b, double c,
double x1, double y1)
{
double temp = -2 * (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 to test above function
int main()
{
double a = -1.0;
double b = 1.0;
double c = 0.0;
double x1 = 1.0;
double y1 = 0.0;
pair image = mirrorImage(a, b, c, x1, y1);
cout << "Image of point (" << x1 << ", " << y1 << ") ";
cout << "by mirror (" << a << ")x + (" << b
<< ")y + (" << c << ") = 0, is :";
cout << "(" << image.first << ", " << image.second
<< ")" << endl;
return 0;
}
Java
// Java code to find mirror image
class GFG
{
static class pair
{
double first, second;
public pair(double first, double second)
{
this.first = first;
this.second = second;
}
}
// function which finds coordinates
// of mirror image.
// This function return a pair of double
static pair mirrorImage(double a, double b,
double c, double x1,
double y1)
{
double temp = -2 * (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)
{
double a = -1.0;
double b = 1.0;
double c = 0.0;
double x1 = 1.0;
double y1 = 0.0;
pair image = mirrorImage(a, b, c, x1, y1);
System.out.print("Image of point (" + x1 +
", " + y1 + ") ");
System.out.print("by mirror (" + a +
")x + (" + b +
")y + (" + c + ") = 0, is :");
System.out.println("(" + image.first +
", " + image.second + ")");
}
}
// This code is contributed by 29AjayKumar
Python 3
# Python 3 code to find mirror image
# Python function which finds coordinates
# of mirror image.
# This function return a pair of double
def mirrorImage( a, b, c, x1, y1):
temp = -2 * (a * x1 + b * y1 + c) /(a * a + b * b)
x = temp * a + x1
y = temp * b + y1
return (x, y)
# Driver code to test above function
a = -1.0
b = 1.0
c = 0.0
x1 = 1.0
y1 = 0.0
x, y = mirrorImage(a, b, c, x1, y1);
print("Image of point (" + str (x1) + ", " + str( y1) + ") ")
print("by mirror (" + str (a) + ")x + (" + str( b) + ")y + (" +str(c) + ") = 0, is :")
print( "(" + str(x) + ", " + str(y) + ")" )
# This code is contributed by ApurvaRaj
C#
// C# code to find mirror image
using System;
class GFG
{
class pair
{
public double first, second;
public pair(double first, double second)
{
this.first = first;
this.second = second;
}
}
// function which finds coordinates
// of mirror image.
// This function return a pair of double
static pair mirrorImage(double a, double b,
double c, double x1,
double y1)
{
double temp = -2 * (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)
{
double a = -1.0;
double b = 1.0;
double c = 0.0;
double x1 = 1.0;
double y1 = 0.0;
pair image = mirrorImage(a, b, c, x1, y1);
Console.Write("Image of point (" + x1 +
", " + y1 + ") ");
Console.Write("by mirror (" + a +
")x + (" + b +
")y + (" + c + ") = 0, is :");
Console.WriteLine("(" + image.first +
", " + image.second + ")");
}
}
// This code is contributed by PrinciRaj1992
输出:
Image of point (1, 0) by mirror
(-1)x + (1)y + (0) = 0, is :(0, 1)