在 C++ 中查找二维平面中一个点的镜像
在这个问题中,我们给定二维平面中的一个点 P 和方程 ax + by + c = 0 的点 a、b、c。我们的任务是找到二维平面中一个点的镜像。
让我们举个例子来理解这个问题:
输入
P = (2, 1), a = 1, b = -1, c = 0
输出
(1, 2)
解释
平面看起来像:
解决方案方法
为了解决这个问题,我们需要找到坐标为 (x', y') 的点 P'。因此,我们有 R,它是 P - P' 线与镜像线相交的中点。
P-R-P' 线垂直于镜像。因此,线的方程将是:
ay - by + d = 0
点是 P(x, y);P'(x', y');R(xm, ym)。
点 P 和 R 是已知的。因此,使用这些方程,我们将找到 P' 为:
$$\left(\frac{??'-??}{??}\right)=\left(\frac{??'-??}{??}\right)=\left(\frac{????-????+??}{??^2+x^2}\right)$$
程序演示我们解决方案的工作原理:
示例
#include <iostream> using namespace std; void findMirrorImage( double a, double b, double c, double x, double y){ double points = -2 * (a * x + b * y + c) / (a * a + b * b); double xm = points * a + x; double ym = points * b + y; cout<<"("<<xm<<","<<ym<<")"; } int main(){ double a = -1.0; double b = 1.0; double c = 0.0; double x = 1.0; double y = 0.0; cout<<"Image of point ("<<x<<", "<<y<<") using mirror ("<<a<<")x + ("<<b<<")y + ("<<c<< ") = 0, is :"; findMirrorImage(a, b, c, x, y); return 0; }
输出
Image of point (1, 0) using mirror (-1)x + (1)y + (0) = 0, is :(0,1)
广告