2011-01-06 14 views
7

की ऊंचाई और चौड़ाई की गणना कैसे करें मैं एक आइसोमेट्रिक टाइल गेम लिख रहा हूं। प्रत्येक टाइल दो गुना चौड़ा है क्योंकि यह लंबा है (डब्ल्यू: एच = 2: 1)। मानचित्र में सभी टाइल्स एक ही आकार के होते हैं और उनकी चौड़ाई और ऊंचाई ज्ञात होती है (टाइलविड्थ और टाइलहेइट)।एक आइसोमेट्रिक आयताकार/वर्ग

कोई भी कॉलम (> 0) और पंक्तियां (> 0) हो सकती हैं।

मैं पूरी तरह तैयार नक्शा की चौड़ाई और ऊंचाई की गणना करने के लिए एक सूत्र के साथ आने के लिए संघर्ष कर रहा हूं। इसे बहुत ऊपर से बहुत नीचे और चरम दाएं से चरम दाएं से दूरी की आवश्यकता है। चूंकि स्तंभों और पंक्तियों की संख्या भिन्न हो सकती है (और इस प्रकार नक्शा हमेशा एक आदर्श हीरा नहीं होता है) यह बहुत कठिन साबित हो रहा है!

उत्तर

5

अच्छा प्रश्न है! एक बहुत ही स्पष्ट उत्तर नहीं है लेकिन गणना करना आसान है:

चलिए पंक्ति अक्ष "आर" और कॉलम अक्ष "सी" कहते हैं, और पहली तस्वीर पर विचार करें, जहां आर अक्ष के साथ सीमा 5 है और सी अक्ष के साथ सीमा 3.

ड्राइंग प्लेन के सापेक्ष आर अक्ष के साथ इकाई वृद्धि, कोण +30 = (कोस 30 डिग्री, पाप 30 डिग्री) = (वर्ग (3)/2 पर है , 0.5), और सी अक्ष के साथ इकाई वृद्धि -30 = (कोस 30 डिग्री, -सिन 30 डिग्री) = (वर्ग (3)/2, -0.5) है।

आपको अपने आइसोमेट्रिक आयत के दो विकर्णों पर विचार करने की आवश्यकता है। पहली तस्वीर में, उन विकर्ण डी 1 = [+ 5 * यू अक्ष के साथ और सी अक्ष के साथ + 3 * यू] और डी 2 = [+ 5 * यू अक्ष के साथ और सी * अक्ष के साथ -3 * यू हैं ], जहां यू आइसोमेट्रिक विमान में टाइल लंबाई है। जब ड्राइंग प्लेन में परिवर्तित हो जाता है, तो यह डी 1 = ((5 + 3) * वर्ग (3)/2 * यू, (5-3)/2 * यू) = (4 * वर्ग (3) * यू, 1 * बन जाता है यू) और डी 2 = ((5-3) * वर्ग (3)/2 * यू, (5 + 3)/2 * यू) = (वर्ग (3) * यू, 4 * यू)। स्क्रीन की चौड़ाई और ऊंचाई, इसलिए अधिकतम दो एक्सेंट = 4 * वर्ग (3) * यू, 4 * यू हैं।

यह सामान्यीकृत किया जा सकता है: यदि एनआर पंक्तियां और एनसी कॉलम हैं, और टाइल लंबाई यू है, तो ड्राइंग प्लेन में आयत के विकर्णों की सीमा डी 1 = ((एनआर + एनसी) * वर्ग (3))/2 * यू, (एनआर-एनसी)/2 * यू) और डी 2 = ((एनआर-एनसी) * वर्ग (3)/2 * यू, (एनआर + एनसी)/2 * यू), और स्क्रीन चौड़ाई और ऊंचाई, इसलिए, इस प्रकार हैं:

W = U*(Nr+Nc)*sqrt(3)/2 
H = U*(Nr+Nc)/2 
0

इस प्रकार रोटेशन समीकरणों का उपयोग क्यों नहीं:

मान लीजिए टाइल्स घुमाया नहीं हैं, इसलिए चारों कोनों निम्नलिखित निर्देशांक है:

(0, 0, 0) 
(w, 0, 0) 
(0, h, 0) 
(w, h, 0) 

जहां

w = Number of Columns * Tile Width 
h = Number of Rows * Tile Height 

अब मुझे लगता है आपके पास प्रोजेक्शन मैट्रिक्स है, इसलिए इसे लागू करने के बाद, आपको 4 डी पॉइंट के 2 डी स्क्रीन निर्देशांक मिलते हैं, और आपको जो करना है वह यह है:

  1. सभी बिंदुओं (प्रक्षेपण के बाद) का न्यूनतम एक्स-समन्वय प्राप्त करें।
  2. सभी बिंदुओं (प्रक्षेपण के बाद) का अधिकतम एक्स-समन्वय प्राप्त करें।
  3. सभी बिंदुओं (प्रक्षेपण के बाद) के न्यूनतम वाई-समन्वय प्राप्त करें।
  4. सभी बिंदुओं (प्रक्षेपण के बाद) का अधिकतम वाई-समन्वय प्राप्त करें।

2 से 1 घटाएं, और चौड़ाई पाने के लिए, और ऊंचाई प्राप्त करने के लिए 4 से 3 को घटाएं।

क्या इससे मदद मिलती है?

+1

सममितीय प्रक्षेपण एक रोटेशन नहीं है। –

+0

ओपीएस, क्षमा करें, लेकिन यह वास्तव में समाधान को नहीं बदलता है। रोटेशन मैट्रिक्स का उपयोग करने के बजाय, वह प्रक्षेपण मैट्रिक्स का उपयोग कर सकते हैं, फिर वही गणना करें। – Rafid

+0

ब्लिमी। यह मुश्किल है। मुझे लगता है कि मेरा कोण थाटा 45 डिग्री है लेकिन मैं विकिपीडिया लेख में लिखे गए मैट्रिक्स सूत्रों को वास्तव में समझ नहीं पा रहा हूं। मुझे काफी गूंगा लगता है (मेरी पृष्ठभूमि गणित या कंप्यूटर विज्ञान नहीं है!)। – Garry

0

मुझे लगता है कि आप Pythagoras' theorem के साथ ऐसा कर सकता है:

halfWidth = tileWidth/2; 
halfHeight = tileHeight/2; 
h = Math.sqrt((halfWidth * halfWidth) * (halfHeight * halfHeight)); 
rowLength = rowSize * h; 
colLength = colSize * h; 

मेरे गणित महान नहीं है, लेकिन h एक टाइल के एक तरफ की लंबाई होना चाहिए ताकि आप तो गुणा कर सकते हैं कि टाइल्स की संख्या से।

+0

यह आयताकार की चौड़ाई और ऊंचाई की गणना करने के लिए काम करता है (और इस प्रकार मानचित्र को विभाजित त्रिकोण का hypotenuse) लेकिन मानचित्र की चौड़ाई नहीं। – Garry

2

आइसोमेट्रिक प्रक्षेपण के कोण 60 डिग्री और 30 डिग्री हैं। वास्तविक चौड़ाई और एक टाइल की ऊंचाई हो जाएगा:

Wiso = TileWidth * Cos(30) + TileHeight * Cos(60)
Hiso = TileWidth * Sin(30) + TileHeight * Sin(60)

अब आप पंक्ति और स्तंभ प्रति टाइल्स की संख्या से इन संख्याओं को गुणा ग्रिड के आकार पाने के लिए जोड़ सकते हैं।

संपादित करें: अपनी छवियों को देखते हुए ऐसा लगता है प्रक्षेपण की तरह सममितीय नहीं (कम से कम नहीं है कि मैं क्या स्कूल में सीखा) है, और कोण दोनों पक्षों के लिए 60deg हैं, इसलिए Cos(30) साथ Cos(60) और Sin(30) साथ Sin(60) की जगह

एक और तरीका है इस पर गौर करने के लिए:

Wgrid = TileWidth * Cos(30) * Ncols + TileHeight * Cos(30) * Nrows
Hgrid = TileWidth * Sin(30) * Ncols + TileHeight * Sin(30) * Nrows

+0

धन्यवाद। वे कड़ाई से आइसोमेट्रिक नहीं हैं - वे dimetric (लंबे के रूप में चौड़े चौड़े) हैं। – Garry

0

आप तल पर शुरू करने और बाईं ओर ऊपर चलना, तो आपके सामने आधा टाइल अ प्रत्येक स्तंभ के लिए, आधा ऊंचाई प्रत्येक पंक्ति के लिए ले जाने के तो। इसी प्रकार यदि आप बाएं से शुरू करते हैं और नीचे किनारे के साथ चलते हैं, तो आप प्रत्येक कॉलम के लिए आधा टाइल चौड़ाई बढ़ाते हैं, फिर प्रत्येक पंक्ति के लिए आधा चौड़ाई बढ़ाते हैं।

तो नक्शे के लिए अक्ष गठबंधन सीमांकन बॉक्स की चौड़ाई (rows+columns)*TileWidth/2 है और ऊंचाई (rows+columns)*TileHeight/2

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

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