2013-08-26 5 views
5

से उत्पन्न समतुल्य त्रिभुज जाल में शिखर खोजें, मैं पूछना चाहता हूं कि वहां कोड है या यदि आप मुझे कुछ लिखने में कुछ मदद दे सकते हैं (सी #, लेकिन मुझे लगता है कि गणित हर जगह समान है) ।केंद्र चरम

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

इसका कारण यह है कि मैं एक जाल बनाना चाहता हूं जो स्क्रीन/खिड़की केंद्र पर अच्छी तरह से छोटे कोड के साथ केंद्रित हो। मुझे सिर्फ जाल पीढ़ी कोड मिल गया है, लेकिन "रेडियल आउटवर्ड प्रचार" उदाहरण नहीं है।

अंत में, मैं बाद में दूरदर्शी फैशन में विस्थापित होने वाले दूर-दूर के ऊर्ध्वाधर को देखना चाहता हूं, लेकिन मुझे लगता है कि जाल कोड होने के बाद यह एक आसान जोड़ है।

क्या कोई मेरी मदद कर सकता है? धन्यवाद!

+0

आप "रेडियल जावक प्रसार" थोड़ा और अधिक वर्णन कर सकते पॉप्युलेट? मैं एक से अधिक तरीकों से सोच सकता हूं जो होगा। – asimes

उत्तर

1

आपको दो चीजें, एक त्रिज्या और दिशा जो पहले त्रिकोण बिंदुओं को निर्दिष्ट करने की आवश्यकता है।

  • त्रिज्या पहले त्रिकोण के कोने के लिए प्रारंभिक बिंदु से दूरी हो जाएगा। सभी त्रिकोणों में एक ही त्रिज्या होगा।
  • दिशा रेडियंस में कुछ विनिर्देश है। मैं मानता हूं कि 0 का मतलब सही है (पीआई बाईं ओर इंगित करेगा)।

पहले त्रिकोण के कोने ढूँढना इस (छद्म कोड, विशिष्ट नहीं भाषा) की तरह किया जा सकता है:

float theta = 0; // The direction, 0 means pointing to the right 
float thetaInc = TWO_PI/3; // 3 because you want a triangle 
for (int i = 0; i < 3; i++) { 
    vertX[i] = initialPointX+cos(theta)*radius; 
    vertY[i] = initialPointY+sin(theta)*radius; 
    theta += thetaInc; 
} 

वहाँ पड़ोसी त्रिकोण के केंद्र अंक खोजने के लिए कई तरीके हैं। एक ही कोड का उपयोग करना होगा, लेकिन theta = TWO_PI/6 प्रारंभ करें, foo (नीचे गणित देखें) के साथ प्रतिस्थापित करें, लूप के लिए पड़ोसी त्रिकोणों के नए केंद्र बिंदु असाइन करें, और उसके बाद एक ही कोड को उचित घुमावदार दिशा (theta += PI) के साथ उपयोग करें। उन त्रिकोणों के शिखर पाएं।

एक त्रिकोण के केंद्र से दूरी दूसरे करने के लिए केवल radius जानने:

  • कर्ण = sqrt(sq(radius)+sq(radius));
  • halfHypotenuse = hypotenuse/2.0;
  • बढ़त के केंद्र के लिए त्रिकोण के केंद्र से दूरी को खोजने के लिए
  • पाइथागोरस प्रमेय: foo = sqrt(sq(radius)-sq(halfHypotenuse));
  • अंतिम दूरी = foo*2.0;

कोड पड़ोसी त्रिकोण के केंद्र अंक खोजने के लिए:

float[] nx = new float[3]; 
float[] ny = new float[3]; 

float theta = TWO_PI/6; 
float hyp = sqrt(sq(radius)+sq(radius)); 
float halfHyp = hyp/2.0; 
float foo = sqrt((sq(radius)-sq(halfHyp)))*2.0; 
for (int i = 0; i < 3; i++) { 
    nx[i] = initialPointX+cos(theta)*foo; 
    ny[i] = initialPointY+sin(theta)*foo; 
    theta += thetaInc; 
} 
0

आप अपने जवाब के लिए बहुत बहुत धन्यवाद। मैं आपके कोड के साथ खेलूँगा - प्रचार भाग निश्चित रूप से आसान होगा।

इस बीच में मैंने त्रिभुजों के बजाय हेक्सागोन के साथ खेला है और यह कोड एक ही उद्देश्य के लिए काफी ठीक काम करता है।:

// केंद्र हेक्स से सरणी, हेक्स के छल्ले की वांछित संख्या बाहर की तरफ जा रहा

  for (int i = 0; i < numberOfHexagonRings; i++) 
      { 
       for (double j = -i; j <= i; j++) 
        for (double k = -i; k <= i; k++) 
         for (double l = -i; l <= i; l++) 
          if ((Math.Abs(j) + Math.Abs(k) + Math.Abs(l) == i * 2) && (j + k + l == 0)) 
          { 
           positionX = (int)(screenCenterX + ((double)sideLength * (l/2 + j))); 
           positionY = (int)(screenCenterY + (3/2 * ((double)sideLength/Math.Sqrt(3)) * l)); 
+0

मैंने वास्तव में ग्रिड बनाने के लिए वास्तव में कोई विधि नहीं जोड़ा, केवल पहला त्रिभुज और उसके पड़ोसियों को कैसे रखा जाए, इसका एक प्रदर्शन। मुझे यकीन नहीं था कि आप ग्रिड का विस्तार कैसे करना चाहते थे (कई तरीके हैं)। अगर यह मदद करता है तो इसे चिह्नित करना अच्छा होगा :) – asimes

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