2010-02-15 3 views
5

मैं एक triangulated सममितीय ग्रिड, इस तरह की है।एक त्रिकोणीय आइसोमेट्रिक ग्रिड में, त्रिकोण एक निर्दिष्ट बिंदु है? <img src="https://mathforum.org/workshops/sum98/participants/sanders/isomgrid.gif" alt="alt text"></p> <p>मेरे कोड में, त्रिकोण स्तंभों के आधार पर वर्गीकृत किया है:

जैसे ही मैं माउस को घुमाता हूं, मैं गणना करना चाहता हूं कि माउस निर्देशांक किस त्रिभुज में हैं। क्या ऐसा करने के लिए कोई सरल एल्गोरिदम है?

+0

निर्भर करता है, शीर्ष पर एक त्रिकोण का एक अंश होना चाहिए, क्योंकि यह स्क्रीन के शीर्ष के साथ लाइन नहीं है। आप इसे कैसे संभालेंगे? –

उत्तर

4

आप जो करना चाहते हैं वह इसे जितना संभव हो सके ग्रिड में बदलना है क्योंकि ग्रिड के साथ काम करना बहुत आसान है।

पहली चीज जो आप करते हैं वह यह है कि यह किस कॉलम में है। आप कहते हैं कि आप इसे स्टोर करते हैं, इसलिए बॉक्स प्रारंभ से कॉलम चौड़ाई ऑफसेट द्वारा एक्स समन्वय पर एक सरल पूर्णांक विभाजन करके इसे आसान होना चाहिए। आसान।

इसके बाद आप यह जानना चाहते हैं कि यह किस त्रिकोण में है (जाहिर है)। आप इसे आंशिक रूप से ग्रिड में कैसे बदलते हैं, क्या आप दिखाते हैं कि आपके पास आइसोमेट्रिक त्रिभुजों के ढेर के बजाय दाएं कोण त्रिकोणों का ढेर है।

त्रिकोणों में वाई धुरी (कॉलम के किनारे) के साथ लंबाई होती है। उस संख्या को दो में विभाजित करें और कार्य करें कि आप कितने कदम नीचे हैं। चरणों की संख्या पर नीचे आधारित है और अगर स्तंभ है सम या विषम आपको बता आप देख रहे हैं, तो होगा:

+--------+ 
|-_  | 
| -_ | 
| -_ | 
|  -_| 
+--------+ 

या रिवर्स। इस बिंदु पर आपको केवल यह निर्धारित करने की आवश्यकता है कि यह कौन सा दायां त्रिकोण है, यह निर्धारित करने के लिए कि कौन सा आइसोमेट्रिक त्रिभुज है।

आपके पास इसके लिए कुछ विकल्प हैं।

  1. आप कर्ण रेस्टराइज़ करने के लिए Bresenham की लाइन एल्गोरिथ्म की तरह कुछ इस्तेमाल कर सकते हैं और जब आप स्तंभ मारा तुम बाहर काम कर रहे हैं यदि आप ऊपर या कि रेखा से नीचे कर रहे हैं;
  2. क्योंकि आपके पास केवल दो संभावित ग्रिड हैं (एक दूसरे के विपरीत होने के कारण यह वास्तव में केवल एक है)। आप पंक्ति मानों की एक सरणी संग्रहीत कर सकते हैं, कह रहे हैं कि कॉलम 3 के लिए, hypotenuse ऑफ़सेट 2 पर है, जबकि 6 के लिए यह 4 पर है और इसी तरह।

आप तेजी से लुकअप के रूप में (2) उत्पन्न करने के लिए (1) भी उपयोग कर सकते हैं।

विचार करने के लिए एकमात्र अन्य बात यह है कि माउस कर्सर किनारे पर है तो क्या होता है?

3

यह क्लेटस ने कहा कि यह समान है, लेकिन मुझे लगता है कि इसे देखने का एक अलग तरीका है।

मैं त्रिकोण पक्ष है संभालने हूँ 1.

मान लीजिए आप नीचे के रूप में ग्रिड है:

 y' 
    /
    /__/__/__/__/__/__/ 
    /__/__/__/__/__/__/ 
    /__/__/__/__/__/__/____ x' 
(0,0) 

आप एक समन्वय प्रणाली में ग्रिड पर विचार करें, जिसमें एक्स & y अक्ष 60 डिग्री के कोण पर हैं, एक बिंदु जिसका कोण एंग्लेड सिस्टम (एक्स ', वाई') में समन्वय ऑर्थोगोनल सिस्टम (उसी उत्पत्ति के साथ अक्ष की सामान्य दिशा) में समन्वय के अनुरूप होगा (x, y) ।

आपकी समस्या में, आपको (x, y) दिया जाता है, हमें (x ', y') ढूंढना होगा और फिर त्रिभुज को समझना होगा।

तो मैं एक्स और जे के साथ इकाई वेक्टर y साथ ओर्थोगोनल है, तो हम उस

x'* i + y'(i/2 + sqrt(3) * j /2) = xi + yj. 

(मूल रूप से इकाई 'angled' वाई अक्ष के साथ वेक्टर मैं/2 + sqrt है (3)/2 * जे। एक्स अक्ष के साथ इकाई वेक्टर सामान्य एक्स-अक्ष के समान है, यानी i)।

इस प्रकार

x' + y'/2 = x 
y' * sqrt(3)/2 = y 

सुलझाने देता है:

y' = 2*y/sqrt(3) 
x' = x - y/sqrt(3) 

अभी है कि एक्स मान लें 'और वाई' सकारात्मक रहे हैं।

अब अगर ग = [एक्स '], एक्स के पूर्णांक भाग'

और आर = [y '], वाई के पूर्णांक भाग'

में (कोणीय) ग्रिड तो

, बिंदु सीटी कॉलम और आरटी पंक्ति में निहित है। (दाएं और ऊपर गिनती और 0 पर गिनती शुरू करें)।

इस प्रकार हम नीचे अपनी बात एक समान्तर

 ____ 
     /\ */ 
    /___\/ 
    (c,r) 

अब करने के लिए पता लगाने के लिए जो त्रिकोण यह है आप एक्स के आंशिक भागों पर विचार 'और वाई' कर सकते हैं में संकुचित है।

{x} = x' - [x'] = x' - c. 
{y} = y' - [y'] = y' - r. 

अब,

अगर {x} + {y} > 1, तो बात है में त्रिकोण के साथ * चिह्नित। यदि {x} + {y} < 1, तो बिंदु अन्य त्रिकोण में निहित है। यदि {x} + {y} = 1, तो बिंदु दो त्रिकोणों के लिए सामान्य रेखा पर है।

आशा है कि इससे भी मदद मिलती है।

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

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