Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

जांचें कि दिए गए चार बिंदु एक वर्ग बनाते हैं या नहीं


परिचय

एक 2D तल में, चार बिंदु दिए गए हैं। यह एल्गोरिदम जांचेगा कि क्या चार बिंदु एक वर्ग बना रहे हैं या नहीं।

वर्ग की जांच के लिए हमें इन शर्तों का मिलान करना होगा:

  • दिए गए बिंदुओं द्वारा बने सभी चार पक्ष समान हैं।
  • सभी दो जुड़े हुए पक्ष समकोण हैं।

इनपुट और आउटपुट

इनपुट: चार बिंदु {(20, 10), (10, 20), (20, 20), (10, 10)}
आउटपुट: बिंदु एक वर्ग बना रहे हैं।

एल्गोरिदम

isFormingSquare(p1, p2, p3, p4)
इस प्रक्रिया में, हम squareDist(p1, p2) नामक एक विधि का उपयोग करेंगे, यह दो दिए गए बिंदुओं की वर्ग दूरी लौटाएगा।

इनपुट: चार बिंदु
आउटपुट: सत्य जब दिए गए बिंदु एक वर्ग बना रहे हों

Begin
    dist12 := squareDist(p1, p2)
    dist13 := squareDist(p1, p3)
    dist14 := squareDist(p1, p4)
    यदि dist12 = dist13 और 2*dist12 = dist14, तो
        dist := squareDist(p2, p4)
        सत्य लौटाएं जब dist = squareDist(p3, p4) और dist = dist12
    यदि dist13 = dist14 और 2*dist13 = dist12, तो
        dist := squareDist(p2, p3)
        सत्य लौटाएं जब dist = squareDist(p2, p4) और dist = dist13
    यदि dist12 = dist14 और 2*dist12 = dist13, तो
        dist := squareDist(p2, p3)
        सत्य लौटाएं जब dist = squareDist(p3, p4) और dist = dist12
    असत्य लौटाएं
End

उदाहरण (C++ कोड)

#include <iostream>
using namespace std;

struct Point {
    int x, y;
};

int squareDist(Point p, Point q) {
    return (p.x - q.x)*(p.x - q.x) + (p.y - q.y)*(p.y - q.y);
}

bool isSquare(Point p1, Point p2, Point p3, Point p4) {
    // जांचें कि चार बिंदु वर्ग बना रहे हैं या नहीं
    int dist12 = squareDist(p1, p2); // p1 से p2 की दूरी
    int dist13 = squareDist(p1, p3); // p1 से p3 की दूरी
    int dist14 = squareDist(p1, p4); // p1 से p4 की दूरी
    
    // जब p1-p2 और p1-p3 की लंबाई समान हो, और (p1-p4) का वर्ग = 2*(p1-p2)
    if (dist12 == dist13 && 2*dist12 == dist14) {
        int dist = squareDist(p2, p4);
        return (dist == squareDist(p3, p4) && dist == dist12);
    }
    // अन्य सभी संयोजनों के लिए समान शर्त
    if (dist13 == dist14 && 2*dist13 == dist12) {
        int dist = squareDist(p2, p3);
        return (dist == squareDist(p2, p4) && dist == dist13);
    }
    if (dist12 == dist14 && 2*dist12 == dist13) {
        int dist = squareDist(p2, p3);
        return (dist == squareDist(p3, p4) && dist == dist12);
    }
    return false;
}

int main() {
    Point p1 = {20, 10}, p2 = {10, 20}, p3 = {20, 20}, p4 = {10, 10};
    if (isSquare(p1, p2, p3, p4))
        cout << "Points are forming a square.";
    else
        cout << "Points are not forming a square";
}

आउटपुट

Points are forming a square.
  1. जांचें कि दिया गया ग्राफ ट्री है या नहीं जांचें कि दिया गया ग्राफ ट्री है या नहीं

    इस समस्या में, एक अनडायरेक्टेड ग्राफ दिया गया है, हमें जांचना है कि ग्राफ ट्री है या नहीं। हम ट्री के मानदंड की जांच करके इसे सरलता से ढूंढ सकते हैं। एक ट्री में साइकिल नहीं होगी, इसलिए यदि ग्राफ में कोई साइकिल है, तो यह ट्री नहीं है। हम इसे दूसरे दृष्टिकोण से भी जांच सकते हैं, यदि ग्राफ कनेक्टेड

  1. - पायथन में बिंदुओं की सूची सीधी रेखा बनाती है या नहीं जांचने का प्रोग्राम

    मान लीजिए हमारे पास कार्टेशियन प्लेन में निर्देशांकों की एक सूची है, हमें जांचना है कि क्या ये निर्देशांक एक सीधी रेखा खंड बनाते हैं या नहीं।उदाहरण के लिए, यदि इनपुट coordinates = [(5, 5), (8, 8), (9, 9)] है, तो आउटपुट True होगा, क्योंकि ये बिंदु ढलान 1 वाली एक रेखा खंड बनाते हैं।समाधान दृष्टिकोणइसे

  1. - Python में चार बिंदु ढूंढना जो x और y अक्ष के समानांतर भुजाओं वाला वर्ग बनाते हैं

    मान लीजिए हमारे पास n जोड़ी बिंदु हैं; हमें चार बिंदु ढूंढने हैं ताकि वे एक वर्ग उत्पन्न कर सकें जिसकी भुजाएं x और y अक्ष के समानांतर हों अन्यथा not possible वापस करें। यदि हम एक से अधिक वर्ग ढूंढ सकते हैं तो उसको चुनें जिसका क्षेत्रफल अधिकतम हो। तो, यदि इनपुट n = 6, points = [(2, 2), (5, 5), (4, 5)