Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm tọa độ các đỉnh hình chữ nhật từ trung điểm trong C++


Cho hình chữ nhật ABCD, biết tọa độ trung điểm P (cạnh AD) và Q (cạnh BC), và độ dài cạnh L. Tìm tọa độ A, B, C, D.

Tìm tọa độ các đỉnh hình chữ nhật từ trung điểm trong C++

Ví dụ P(1,0), Q(1,2), L=2 → A(0,0), B(0,2), C(2,2), D(2,0).

3 trường hợp:

  • Hình chữ nhật ngang (AD, BC song song trục Ox).
  • Hình chữ nhật dọc (AD, BC song song trục Oy).
  • Hình chữ nhật nghiêng: tính độ dốc m = (Px-Qx)/(Py-Qy), dịch chuyển dx = L/(2√(1+m²)), dy = m·dx.

Ví dụ

#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));
}

Kết quả

A (0, 2) B (-2, 0) C (0, -2) D (2, 0)