आज रात के लिए अंतिम प्रश्न, मैं वादा करता हूं। ये पॉइंटर्स मुझे गंभीर सिरदर्द दे रहे हैं।इन पॉइंटर्स को संदर्भित करते समय मैं गलती से ओवरराइटिंग कैसे कर रहा हूं?
मैं एक std :: सूची <Point
> बहुभुज और एक std :: बहुभुज की सूची भी कहा जाता तरह परिभाषित किया गया है:
typedef std::list<Point> Polygon;
typedef std::list<Polygon> PolygonList;
// List of all our polygons
PolygonList polygonList;
मैं विधि बनाई नीचे से कोई (एक्स निकटतम प्वाइंट को हटाने के लिए प्रयास करने के लिए, वाई), मेरे बहुभुज सूची में मेरे सभी बहुभुजों की जांच।
void deleteNearestPoint(int x, int y)
{
y = screenHeight - y;
Polygon &closestPolygon = polygonList.front();
Polygon::iterator closestPoint = closestPolygon.begin();
float closestDistance = sqrt(pow(x - closestPoint->x, 2) + pow(y - closestPoint->y, 2));
// Search PolygonList
PolygonList::iterator listIter;
Polygon::iterator iter;
for(listIter = polygonList.begin(); listIter != polygonList.end(); listIter++)
{
Polygon &tempPolygon = *listIter;
for(iter = tempPolygon.begin(); iter != tempPolygon.end(); iter++)
{
const float distance = sqrt(pow(x - iter->x, 2) + pow(y - iter->y, 2));
if (distance < closestDistance)
{
closestPolygon = *listIter;
closestPoint = iter;
closestDistance = distance;
}
}
}
closestPolygon.erase(closestPoint);
redraw();
}
हालांकि, कहीं मेरे पास एक सूचक या संदर्भ चर मुझे खराब कर रहा है। यह कोड संकलित करता है लेकिन एक बहुत ही अजीब तरीके से कार्य करता है।
मैं एक डिबग बयान लिखा गया है और कहते हैं कि मैं बहुत तरह मेरे बहुभुज सूची में 3 बहुभुज देता है:
बहुभुज #: 0
प्वाइंट: (448, 43)
प्वाइंट: (469 , 177)
प्वाइंट: (374, 123)
बहुभुज #: 1
प्वाइंट: (295, 360)
प्वाइंट: (422, 350)
प्वाइंट: (315, 266)
प्वाइंट: (295, 360)
बहुभुज #: 2
प्वाइंट: (143, 202)
प्वाइंट: (301, 203)
प्वाइंट: (222, 100)
प्वाइंट: (143, 202)
अब, चलो मैं कोशिश करते हैं और यह एक x/y पास देने हटाएँ फ़ंक्शन का उपयोग 422 इंगित करने के लिए कहते हैं, 350 वांछित परिणाम होगा यह बस बहुभुज # 1 लेकिन इसके बजाय से उस बिंदु (422, 350) को हटाने मुझे यह मिलता है:
पॉलीगॉन #: 0
प्वाइंट: (295, 360)
प्वाइंट: (422, 350)
प्वाइंट: (315, 266)
प्वाइंट: (295, 360)
बहुभुज #: 1
प्वाइंट: (295, 360)
प्वाइंट: (315, 266)
प्वाइंट: (295, 360)
बहुभुज #: 2
प्वाइंट: (143, 202)
प्वाइंट: (301, 203)
प्वाइंट: (222, 100)
प्वाइंट: (1 43, 202)
यह हटाना था (422, 350) लेकिन यह भी क्या बहुभुज # 1 इसके बिंदु के हटाने से पहले था करने के लिए बहुभुज # 0 अधिलेखन की अजीब पक्ष प्रभाव पड़ता है।
मुझे पता है कि मैं अपनी विधि में गलत सूचक या संदर्भ का उपयोग कर रहा हूं। क्या कोई यह बता सकता है कि मैं संभवतः ऐसा कर रहा हूं जो इसका कारण बन रहा है? मुझे लगता है कि ऐसा इसलिए है क्योंकि मेरा & निकटतम पॉलीगॉन को संदर्भ के रूप में घोषित किया गया है, लेकिन अगर मैं इसे किसी अन्य चीज़ के रूप में सेट करने का प्रयास करता हूं तो मुझे संकलन त्रुटियां मिलती हैं।
एक के रूप में, और उम्मीद है कि कुछ शैक्षिक मूल्य के साथ: (मैं कोड का परीक्षण नहीं किया है) कुछ इस तरह करने के लिए फिर से लिखने का प्रयास करें वर्ग दूरी के साथ काम कर आप महंगा sqrt की बचत होगी() कहते हैं। इसके अलावा, पाउ() काफी महंगा है; चूंकि आप केवल पूर्णांक का उपयोग कर रहे हैं, तो आप अपने स्वयं के वर्ग() फ़ंक्शन को लिखने से बेहतर हैं। – Thomas