मान लीजिए हमारे पास एक आयत 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)