使用中點在 C++ 中查詢矩形的角點
假設我們有一個矩形 ABCD,但我們只有中點 P 和 Q 的座標以及矩形的長度 L。

我們的任務是使用 P 和 Q 的座標以及邊長 L 找到 A、B、C 和 D 的座標。例如,如果 P 是 (1, 0),Q 是 (1, 2),L 是 2,則 A、B、C、D 將分別為 (0, 0)、(0, 2)、(2, 2)、(2, 0)。
可能出現三種情況。
- 矩形是水平的,因此 AD 和 BC 平行於 X 軸
- 矩形是垂直的,因此 AD 和 BC 平行於 Y 軸
- 矩形與軸成一定角度。
對於第三種情況,我們必須使用 P 和 Q 的座標找到斜率。如果我們得到 AD 的斜率,那麼我們就可以生成透過 AD 的直線方程,然後使用距離公式得到結果。
$$AD 的斜率,m=\frac{px-qx}{py-qy}$$ $$沿 x 軸的位移,dx=\frac{L}{2\sqrt{1+m^{2}}}$$ $$沿 y 軸的位移,dy=\frac{mL}{2\sqrt{1+m^{2}}}$$
示例
#include <iostream>
#include <cmath>
using namespace std;
class Point {
public:
float x, y;
Point(float a = 0.0f, float b = 0.0f) {
x = a, y = b;
}
};
void printCorners(Point p, Point q, float l) {
Point a, b, c, d;
if (p.x == q.x) {
a.x = p.x - (l/2.0);
d.x = p.x + (l/2.0);
a.y = d.y = p.y;
b.x = q.x - (l/2.0);
c.x = q.x + (l/2.0);
b.y = c.y = q.y;
}else if (p.y == q.y) {
a.y = p.y - (l/2.0);
d.y = p.y + (l/2.0);
a.x = d.x = p.x;
b.y = q.y - (l/2.0);
c.y = q.y + (l/2.0);
b.x = c.x = q.x;
}else{
float m = (p.x-q.x)/float(q.y-p.y);
float dx = (l /sqrt(1+(m*m))) *0.5 ;
float dy = m*dx;
a.x = p.x - dx;
a.y = p.y - dy;
d.x = p.x + dx;
d.y = p.y + dy;
b.x = q.x - dx;
b.y = q.y - dy;
c.x = q.x + dx;
c.y = q.y + dy;
}
cout << "A (" << a.x << ", " << a.y << ")\n"
<< "B (" << b.x << ", " << b.y << ")\n"
<< "C (" << c.x << ", " << c.y << ")\n"
<< "D (" << d.x << ", " << d.y << ")\n";
}
int main() {
Point p(1, 1), q(-1, -1);
printCorners(p, q, 2*sqrt(2));
}輸出
A (0, 2) B (-2, 0) C (0, -2) D (2, 0)
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP