मुझे पता है कि आर में फॉर-लूप का उपयोग अक्सर अनावश्यक होता है, क्योंकि यह वेक्टरनाइज़ेशन का समर्थन करता है। मैं निम्नलिखित उदाहरण कोड से संबंधित अपने प्रश्न के लिए जितना संभव हो उतना कुशल प्रोग्राम करना चाहता हूं।एक हेक्सागोनल ग्रिड में सेल नंबर की वेक्टरिज़ गणना
मेरे पास हेक्सागोनल ग्रिड है, और मैं सेल की संख्या की गणना कर रहा हूं, यह मेरे बाएं कोने में शुरू होने वाले बाएं निचले कोने में शुरू होने वाले उदाहरण में 1 से 225 तक है। तो सेल 16 है रखा थोड़ा सही सेल 1. देखने स्नैपशॉट ऊपर ऑफसेट:
वजह, अगर मैं वाई समन्वय है, एक्स समन्वय या तो गोल, या छत हो गया है। अपने आवेदन में उपयोगकर्ता कोशिकाओं बताते हैं, मैं इस बचाने के लिए और पाश के लिए एक के रूप में Xcells के लिए खिलौना इनपुट मूल्यों के साथ, इस प्रकार और Ycells उपयोगकर्ता चुना है | कोशिकाओं वह चुना है निर्धारित करने के लिए कोशिकाओं के माध्यम से जाना:
gridsize <- 15
Xcells <-c(0.8066765, 1.8209879, 3.0526517, 0.5893240)
Ycells <-c(0.4577802, 0.4577802, 0.5302311, 1.5445425)
clicks <- length(Xcells)
cells <-vector('list', clicks)
यह सेल 1 2 3 और 16. 4 क्लिक से मेल खाता है। अब सेल नंबर निर्धारित करने के लिए:
Y <- ceiling(Ycells)
for(i in 1:clicks){
if(Y[i]%%2==1){
X[i] <- round(Xcells[i])
}
else{
X[i]<- ceiling(Xcells[i])
}
#determine the cell numbers and store in predefined list
cells[[i]] <- (Y[i]-1)*gridsize + X[i]
}
तो अगर Y है 'भी' एक्स गोल हो गया है, और अगर Y है 'अन-यहां तक कि' यह छत मूल्य हो गया है।
क्या वेक्टरेशन का उपयोग करके लूप के बिना ऐसा करने का कोई तरीका है? एक अन्य विकल्प
(-
आपने 'X' किसी भी को परिभाषित नहीं किया है यहाँ। इसके अलावा, अच्छे प्रश्न के लिए कुडोस और एक द्विपक्षीय समाधान मांगने के लिए नहीं बल्कि समस्या को संबोधित करने के लिए- इन दिनों एसओ पर एक लाख में ... –
मुझे लगता है कि यह संदर्भ मदद कर सकता है: http: //www.redblobgames। कॉम/ग्रिड/हेक्सागोन/ – baptiste
@ डेविड एडनबर्ग, क्या यह आवश्यक है? निश्चित नहीं है कि मुझे इसे इस तरह से कहने की अनुमति है, लेकिन एक्स एक्स को अपने आप को 'एक्स [i] <- round (..) ' – Piet93