একটি দ্রুত এবং নোংরা পদ্ধতিটি হল কেবলমাত্র বিল্ডিংয়ের ছাদগুলির ছায়াগুলি আঁকুন, গা dark় ধূসর রঙে রেন্ডার করুন (কোনও আন্ডারলাইন্ড স্তর থাকলে সেখানে আধা-স্বচ্ছতর পছন্দ করুন) এবং তাদের উপরে বিল্ডিং বহুভুজ আঁকুন। আলোর উত্সের অজিমুথ এবং উচ্চতা দ্বারা প্রতিষ্ঠিত দিকের দিকে বিল্ডিং উচ্চতা দ্বারা নির্ধারিত দূরত্বগুলির দ্বারা বিল্ডিং বহুভুজগুলির অনুবাদ করে ছাদের ছায়াগুলি প্রাপ্ত করা হয় (অসীম দূরে বলে মনে করা হয়)। (অনুবাদ পরিমাণের জন্য একটি সূত্র নীচে প্রদর্শিত হবে।)
স্বল্প উচ্চতা বা লম্বা বিল্ডিং (যেমন আকাশচুম্বী) ব্যতীত এটি ঠিকঠাক কাজ করে: দেখুন ডানদিকে লম্বা বিচ্ছিন্ন বিল্ডিংয়ের ছায়াগুলি কীভাবে নিজেরাই ভবনগুলি থেকে পৃথক করা হয়েছে।
ছায়াগুলিগুলিকে বিল্ডিংয়ের সাথে সঠিকভাবে সংযুক্ত করতে , আপনাকে বিল্ডিং দেয়ালের ছায়াগুলি অন্তর্ভুক্ত করতে হবে । এটি করা কঠিন নয়। পিতে অবস্থিত একটি বিন্দু এবং কিউতে অবস্থিত অন্য একটি বিন্দুর মধ্যে প্রসারিত প্রাচীরের ছায়াটি {P, Q, Q ', P'} যেখানে Q 'Q এবং P এর ছায়া দ্বারা বর্ণিত চতুর্ভুজ হবে? পি। একটি বহুভুজ ভবনটি সংযুক্ত বহুভুজগুলির একটি সংকলন হবে যা পয়েন্টের বদ্ধ ক্রমগুলি দ্বারা প্রতিনিধিত্ব করে (পি (1), পি (2), ..., পি (এন))। এই জাতীয় প্রতিটি বহুভুজের জন্য প্রান্তের ছায়ার (পি (1), পি (2)), (পি (2), পি (3)), ..., (পি (এন), পি ( 1))। প্রান্তগুলির উপর একটি লুপের মাধ্যমে এটি করা সহজ।
একটি ডিগ্রি (উত্তর পূর্ব) এবং একটি ডিগ্রি উচ্চতা (দিগন্ত থেকে) এর একটি আলোর জন্য , প্রক্ষেপণ স্থানাঙ্ক (x, y) এবং উচ্চতা h (সমস্ত একই ইউনিটে প্রকাশিত ) সহ একটি পয়েন্ট P এর ছায়া , যেমন মিটার) পি '= (x - h পাপ (ক) / ট্যান (গুলি), ওয়াই-হ কোস (ক) / ট্যান (গুলি) এ অবস্থিত। পুরো স্তরটির জন্য আপনাকে কেবল একবার পাপ (ক) / ট্যান (গুলি) এবং কোস (ক) / ট্যান (গুলি) গণনা করতে হবে এবং প্রতিটি বহুভুজ জন্য আপনাকে অফসেটগুলি পেতে একবার কেবল সেই উপাদানগুলিকে উচ্চতা দিয়ে গুণ করতে হবে for বহুভুজ মধ্যে প্রতিটি পয়েন্ট ছায়া। (আসল গণনার কাজের চাপ জিআইএস দ্বারা পরিচালিত হয়, আপনার কোড নয়, কারণ এটি এই সমস্ত চতুর্ভুজগুলির ইউনিয়ন গঠন করে))
এখানে প্রভাব উদাহরণ। (প্রথম চিত্রের তুলনায় আজিমুথ এবং উচ্চতা কিছুটা বদলেছে, তবে বিল্ডিং বহুভুজ এবং উচ্চতা - যা পৃথক - পূর্বের মতোই))
উপাঙ্গ
একটি অনুরোধের প্রতিক্রিয়া হিসাবে, এখানে দ্বিতীয় উদাহরণ তৈরি করতে ব্যবহৃত কোডটি রয়েছে। যদিও প্রায় কেউই এই ভাষা (অ্যাভিনিউ) আর ব্যবহার করে না, এটি আপনার প্রিয় জিআইএসে সমাধান তৈরি করার জন্য সিউডোকোড হিসাবে ভাল ব্যবহার করতে পারে। (তবে বেশিরভাগ সিউডোকোডের বিপরীতে এটি আসলে চালিয়ে পরীক্ষা করা হয়েছে। :-) এটি এতই সহজ যে কোনও ব্যাখ্যা প্রয়োজন হবে না; কেবল সচেতন থাকুন যে সূচকটি 1 দিয়ে নয়, 0 দিয়ে শুরু হয় এবং বহুভুটির রিংগুলি স্পষ্টভাবে বন্ধ হয়ে যায় (তালিকার শেষ পয়েন্টটি প্রথম পয়েন্টের সাথে মিলে যায়)।
' S
' Return the shadow of a shape.
' Field calculator example:
' av.run("S", {[shape], [height], 200, 35})
'======================================================================'
theShape = SELF.Get(0) ' A projected polygon
xHeight = SELF.Get(1) ' Expressed in the projected units
xAzimuth = SELF.Get(2).AsRadians ' Any angle (in degrees) east of north
xAltitude = SELF.Get(3).AsRadians ' Angle between 0 and 90 (vertical)
'
' Compute the shadow offsets.
'
xSpread = 1/xAltitude.Tan
x = -xHeight * xSpread * xAzimuth.Sin
y = -xHeight * xSpread * xAzimuth.Cos
xy = x@y
'
' Begin with the original shape.
'
p = theShape.Clone
'
' Adjoin the wall shadows.
'
for each lPts in theShape.AsList ' Loop over the rings
for each i in 1..(lPts.Count-1) ' Loop over edges in this ring
l = {lPts.Get(i-1), lPts.Get(i), lPts.Get(i)+xy, lPts.Get(i-1)+xy}
p = p.ReturnUnion(Polygon.Make({l}))
end
end
return p
' end of script