2013-08-05 8 views
6

यह प्रश्न मेरे पहले पूछे गए this question के समान है। लेकिन केवल निकटतम बक्से की संख्या लौटने की बजाय, मैं संबंधित बक्से का क्षेत्र ढूंढना चाहता हूं।निकटतम बक्से का क्षेत्र

विवरण: मान लीजिए मैं मान लीजिए इस-

#Rect x1  y1   x2  y2   area 

1  0.0000 0.0000  0.8147 0.1355  0.1104 
2  0.8147 0.0000  1.0000 0.1355  0.0251 
3  0.8147 0.1355  0.9058 0.8350  0.0637 
4  0.0000 0.1355  0.1270 0.9689  0.1058 
5  0.9058 0.1355  0.9134 0.2210  0.0006 
6  0.9058 0.8350  1.0000 1.0000  0.0155 
7  0.8147 0.8350  0.9058 1.0000  0.0150 
8  0.1270 0.1355  0.6324 0.3082  0.0873 
9  0.1270 0.9689  0.8147 1.0000  0.0214 
10 0.0000 0.9689  0.1270 1.0000  0.0040 
11 0.9134 0.1355  1.0000 0.2210  0.0074 
12 0.9134 0.2210  1.0000 0.8350  0.0532 
13 0.9058 0.2210  0.9134 0.8350  0.0047 
14 0.6324 0.1355  0.8147 0.3082  0.0315 
15 0.6324 0.3082  0.8147 0.9689  0.1205 
16 0.1270 0.3082  0.6324 0.9689  0.3339 

की तरह बॉक्स के निर्देशांक का एक सेट इन निर्देशांक इस picture- की तरह उप आयतों में एक इकाई वर्ग विभाजित enter image description here

अब है यह कोड निकटतम बक्से की संख्या का मूल्य देता है, लेकिन यह उस बॉक्स के क्षेत्र को वापस करने में विफल रहता है। यहाँ मेरी code-

#include <iostream> 
#include <cstdlib> 
#include <vector> 
#include <stdio.h> 

using namespace std; 

class Rect { 
    public: 
    double x1, x2, y1, y2, area; 

    Rect(double X1, double Y1, double X2, double Y2, double Area) { 
    if (X1 < X2) { 
     x1 = X1; x2 = X2; 
    } else { 
     x2 = X1; x1 = X2; 
    } 
    if (Y1 < Y2) { 
     y1 = Y1; y2 = Y2; 
    } else { 
     y2 = Y1; y1 = Y2; 
    } Area =area; 

    } 

    bool NearestBox(Rect rect) { 

    //for x-axis 
    if (x1 == rect.x2 || x2 == rect.x1) {  

     if (y1 >= rect.y1 && y1 < rect.y2) { 
     return true; 
     } 
     if (y2 > rect.y1 && y2 <= rect.y2) { 
     return true; 
     } 
    }    

    // for y-axis  

    if (y1 == rect.y2 || y2 == rect.y1) { 
     if (x1 >= rect.x1 && x1 < rect.x2) { 
     return true; 
     } 
     if (x2 > rect.x1 && x2 <= rect.x2) { 
     return true; 
     } 
    } 

    return false; 

    } 
}; 

int main() { 

    vector<Rect> rects;  
       //Rect( x1 , y1 , x2 , y2 , area) 
    rects.push_back(Rect(0.0000,0.0000, 0.8147,0.1355, 0.1104)); 
    rects.push_back(Rect(0.8147,0.0000, 1.0000,0.1355, 0.0251)); 

    rects.push_back(Rect(0.8147,0.1355, 0.9058,0.8350, 0.0637)); 
    rects.push_back(Rect(0.0000,0.1355, 0.1270,0.9689, 0.1058)); 

    rects.push_back(Rect(0.9058,0.1355, 0.9134,0.2210, 0.0006)); 
    rects.push_back(Rect(0.9058,0.8350, 1.0000,1.0000, 0.0155)); 
    rects.push_back(Rect(0.8147,0.8350, 0.9058,1.0000, 0.0150)); 



    rects.push_back(Rect(0.1270,0.1355, 0.6324,0.3082, 0.0873)); 
    rects.push_back(Rect(0.1270,0.9689, 0.8147,1.0000, 0.0214)); 
    rects.push_back(Rect(0.0000,0.9689, 0.1270,1.0000, 0.0040)); 

    rects.push_back(Rect(0.9134,0.1355, 1.0000,0.2210, 0.0074)); 
    rects.push_back(Rect(0.9134,0.2210, 1.0000,0.8350, 0.0532)); 
    rects.push_back(Rect(0.9058,0.2210, 0.9134,0.8350, 0.0047)); 


    rects.push_back(Rect(0.6324,0.1355, 0.8147,0.3082, 0.0315)); 
    rects.push_back(Rect(0.6324,0.3082, 0.8147,0.9689, 0.1205)); 
    rects.push_back(Rect(0.1270,0.3082, 0.6324,0.9689, 0.3339)); 

    int b=13; 
    int nearBox_count = 0; 
    //double area=0; 
    double TotalArea=0; 

    for (int x = 0; x < rects.size(); ++x) { 

    if (rects[b].NearestBox(rects[x])) { 
     if (x==b) { 
     continue; //this is our box , so do not count it. 
     } 

    nearBox_count++; 
    printf("box[%d] is nearest to box[%d] and has area %f \n", (b+1), (x+1), rects[x].area); 

    TotalArea +=rects[x].area; 

    } 
    } 

    printf("Total number of nearest box for box[%d] = %d, and the sum of area is= %f \n", (b+1), nearBox_count, TotalArea); 

    return 0; 
} 

यह ऊपर चित्र के साथ परिणाम की तुलना द्वारा परिणामों

box[14] is nearest to box[1] and has area 0.000000 
box[14] is nearest to box[3] and has area 0.000000 
box[14] is nearest to box[8] and has area 0.000000 
box[14] is nearest to box[15] and has area 0.000000 
Total number of nearest box for box[14] = 4, and the sum of area is= 0.000000 

तो प्रिंट है, आप देख सकते हैं कि यह निकटतम बक्से का मान देता है, लेकिन वापस जाने के लिए विफल रहता है उनके संबंधित क्षेत्रों का मूल्य।

क्या कोई इसे ठीक करने में मेरी सहायता कर सकता है?

+3

क्षेत्र प्रदर्शित नहीं होने का कारण यह है क्योंकि आप उन्हें असाइन नहीं करते हैं। एकमात्र असाइनमेंट जो मैं देखता हूं वह 'डबल एरिया = 0;' है। – Geobits

+0

आप 'एरिया' नामक एक डबल वैरिएबल बनाते हैं, आप इसे शून्य पर प्रारंभ करते हैं, आप कभी भी इसका उपयोग कभी नहीं करते हैं जब तक कि कोई लाइन न आए जिसमें आप इसे प्रिंट करते हैं। आप क्या देखने की उम्मीद करते हैं? –

+0

@Geobits: उत्तर के लिए धन्यवाद! मैं * Rect * से क्षेत्र के मूल्य कैसे प्राप्त कर सकता हूं ?? – aries0152

उत्तर

2

आप वास्तव में rect[x] में क्षेत्र का उपयोग नहीं कर रहे हैं। आपको अतिरिक्त area चर की आवश्यकता नहीं है, या तो। वैसे ही जैसे कुछ करना:,

printf("box[%d] is nearest to box[%d] and has area %f \n", (b+1), (x+1), rects[x].area); 

TotalArea += rects[x].area; 

इसके अलावा Masad की टिप्पणी से, आप निर्माता में area नहीं देते।

area = Area; 
+0

मेरा कोड संपादित किया गया। लेकिन यह अभी भी क्षेत्र = 0.000 प्रिंट करता है। – aries0152

+0

क्या आपने '= +' से '+ =' को बदल दिया था? – Geobits

+0

हां मैंने किया, हालांकि मैं इसे यहां बदलना भूल गया था। संबंधित क्षेत्र और कुल क्षेत्र दोनों के लिए, यह मूल्य दिखाता है 0.0000 – aries0152

2
इसके बजाय मुद्रण area आप मुद्रण किया जाना चाहिए rects[x].area की

: आप एक लाइन जोड़ने की जरूरत है।

अन्य बातों के मुद्दों हो सकता है कि के एक जोड़े:

  • आप double रों पर समानता का परीक्षण कर रहे। यह एक अच्छा विचार नहीं है क्योंकि गोल करने वाली त्रुटियां हमेशा रेंग सकती हैं। यह जांच करके समानता के लिए जांच करना बेहतर होता है कि दोनों संख्याएं एक दूसरे की सहिष्णुता के भीतर हैं या नहीं।
  • आप क्षेत्रफल और क्षेत्र के बाध्यकारी बॉक्स को परिभाषित करते हैं। चूंकि आपके प्रत्येक में चार महत्वपूर्ण आंकड़े हैं, इनमें से एक परिभाषा में पहले से ही पर्याप्त गोलिंग त्रुटि है। कुछ अनुप्रयोगों के लिए आप बाध्यकारी बॉक्स से क्षेत्र की गणना करना चाहते हैं।
+0

बदलता क्षेत्र [x] .area को बदलने के लिए। लेकिन अभी भी परिणामों में केवल 0.0000 प्रिंट करता है !!! – aries0152

संबंधित मुद्दे