मैं बल्कि छाया की किरणों को दृष्टि की किरणों की रेखा के स्थान पर डालना चाहता था।
मान लें कि यह आपका दृश्य क्षेत्र है (संभावित रूप से दृश्यमान क्षेत्र)
######################
#####.............####
###................###
##..................##
#....................#
#....................#
#..........@.........#
#....................#
#....................#
##..................##
###................###
#####.............####
######################
# ब्लॉक दिखाई नहीं दे रहे हैं जबकि। दिखाई दे रहे हैं
चलो कुछ बाधा डालते हैं X:
######################
#####.............####
###................###
##.....X.....XXX....##
#......X.......X.....#
#...X.XX.............#
#...X......@.........#
#...X..........X.....#
#...XXXXXX...........#
##..................##
###....X...........###
#####.............####
######################
आपके पास एक्स की एक सूची है जो दृश्य क्षेत्र के भीतर है तो आप प्रत्येक टाइल के रूप में छिपी हुई है, जो इस बाधा के पीछे है: जब कोई बाधा छिपी हुई है, तो आप इसे सूची से हटा देते हैं।
######################
#####.............####
###................###
##.....X.....XXX....##
#......X.......X.....#
#...X.XX.............#
#...X......@.........#
#...X..........X.....#
#...XXXXX*...........#
##......##..........##
###....*#..........###
#####.###.........####
######################
ऊपर दिए गए उदाहरण में आप नीचे की दीवार के दाईं ओर डाली गई छाया को देख सकते हैं और यह छाया किस तरह से आपके द्वारा जाँच की जाने वाली बाधा की सूची से छिपी हुई बाधा को हटाती है (X को जांचना है? * Check)।
यदि आप कुछ बाइनरी पार्टिटोन का उपयोग करके सूची को सॉर्ट करते हैं, तो सबसे पहले एक्स की जांच की जाती है, तो आप अपने चेक को थोड़ा गति दे सकते हैं।
आप एक बार में Xs के ब्लॉक को जांचने के लिए "नेवल बैटल" अल्गोरिदम का एक प्रकार का उपयोग कर सकते हैं (मूल रूप से एक adiacent X की तलाश में है जो एक दिशा में है जो छाया शंकु को व्यापक बना सकता है)
[संपादित करें]
एक छाया को सही ढंग से डालने के लिए दो किरणों की आवश्यकता होती है और, चूंकि एक टाइल आयताकार है, उपलब्ध समरूपता का उपयोग करके बहुत सी धारणाएं की जा सकती हैं।
रे निर्देशांक की गणना बाधा टाइल के चारों ओर एक सरल अंतरिक्ष विभाजन का उपयोग करके की जा सकती है:
प्रत्येक आयताकार क्षेत्र में एक विकल्प का गठन किया जाता है कि टाइल के कोने को छाया कोन किनारे के रूप में लिया जाना चाहिए।
इस तर्क को कई आसन्न टाइलों को जोड़ने के लिए आगे धकेला जा सकता है और उन्हें एक व्यापक शंकु का पालन करने के लिए दिया जाता है।
पहला कदम यह सुनिश्चित करना है कि कोई बाधा पर्यवेक्षक दिशा की ओर नहीं है, उस स्थिति में इसके बजाय निकटतम बाधा माना जाता है:
यदि पीली टाइल एक बाधा है जो टाइल नई लाल टाइल बन जाती है।
अब ऊपरी शंकु किनारे पर विचार करने दें:
नीली टाइलें छाया कोन को चौड़ा करने के लिए सभी संभावित उम्मीदवार हैं: यदि उनमें से कम से कम एक बाधा है तो किरण को उस टाइल के चारों ओर अंतरिक्ष विभाजन का उपयोग करके स्थानांतरित किया जा सकता है जैसा कि पहले देखा गया था।
हरे रंग की टाइल केवल एक उम्मीदवार है यदि पर्यवेक्षक नारंगी रेखा के ऊपर है जो निम्नानुसार है:
वही दूसरी किरण के लिए और लाल बाधा के बारे में पर्यवेक्षक के अन्य पदों के लिए खड़ा है।
अंतर्निहित विचार प्रत्येक शंकु कास्टिंग के लिए जितना संभव हो उतना क्षेत्र को कवर करना है और चेक करने के लिए बाधाओं की सूची जितनी जल्दी हो सके छोटा करना है।