|
المجسمات
الفراغية
لعلك تعرف أن
المجسمات مثل المكعبات مثلاُ يتغير منظرها
إذا نظرت إليها من زوايا متعددة ، بل الأمر
يختلف إذا كان في الغرفة أو المكان مصدر ضوء
حيث تشاهد أحد جوانب المكعب أكثر تألقاُ
ولمعاناُ من شكلها الآخر وهذا ما تفعله لوجو
مايكروسوفت ، ولوجو مايكروسوفت لديها حوالي
1024 سلحفاة يمكنك أن تستخدمهم ولكن إحدى تلك
السلاحف تتحكم في مصدر الضوء وهي السلحفاة
رقم -3 بينما السلحفاة رقم -1 هي التي تحدد
الموضع الذي سوف تري أنت منه المجسم.
رسم المجسمات
والواقع أن
المجسمات ترسم في الفراغ
بنفس أوامر الفراغ ، بالإضافة لقليل من
الأوامر الإضافية التي تساعد لوجو علي فهم
الرسم ، فلكي تخفي خط أو سطح مخفي يجب تعريف
السطح ، فالسطوح تملئ بمضلعات ، فقط تحتاج
لتخبر لوجو متي يبدأ السطح ومتي تبدأ ، وإذا
كنت تستخدم متجهات فقط لرسم مكعب ، فإن لوجو
لا تعرف ما إذا كان له 6 جوانب مغلقة (مكعب مجسم)
أو 4 مربعات مفتوحة من أعلي وأسفل ، فالمتجه
وحده غامض بالنسبة للسطوح
.
أوامر رسم
المجسمات :
والأوامر التالية
ضرورية لرسم المجسم :
|
Polystart
|
بداية
سطح
|
يبدأ مضلع
– سطح- جديد
|
|
Polyend
|
نهاية
سطح
|
ينهي تعريف المضلع-السطح-
ويظهره
|
|
Polyview
|
رؤية
سطح
|
يظلل و يظهر كل السطوح
المعرفة
.
|
|
Setturtle -3
|
اضبط
الضوء
|
يستخدم
تلك السلحفاة لوضع مصدر الضوء
|
|
Setlight
|
الضوء
|
يستخدم لإظهار كيف تتلألأ
الأشياء
|
ولكن
هناك بعض القيود علي السطوح
Polygon Restrictions
1.
يجب أن يحوي الشكل 3 رؤوس
علي الأقل
2.
المضلع يجب أن يكون محدبا.
3.
يجب أن يكون السطح مستوي ،
ولا تستخدم أي من الأوامر
up, down, rr, lr بين بدء تعريف
المسطح
polystart ونهايته
polyend .
وفيما
يلي توضيح للبند الأول :
فالمثال التالي
لا ينتج شئ لأنه عبارة قطعة مستقيمة :
Polystart
perspective
make "saveposxyz posxyz
fd 100
rt 0.00000001
fd 100
setposxyz :saveposxyz
polyend
والشكل التالي
ينتج سطح مثلث مظلل باللون الرمادي:
|
Polystart
perspective
make "savepos posxyz
fd 50
fd 50
rt 90
fd 100
setposxyz :saveposxyz
polyend
|
|
ولكن ماذا نعني بكلمة سطح محدب؟
خذ أي نقطتين
داخل السطح وصل بينهما بخط مستقيم ، فإذا مر
الخط بنقاط لا تنتمي للشكل ، فإنه ليس محدب
.
فالمثلثات
والمربعات …. الخ محدبة
.
حرف
E أو حرف ى ليس
محدب لأن التوصيل بين البداية والنهاية يمر
بنقاط خارج الحرف
.
فالسطر التالي
ينتج سطح محدب :
repeat 4 [fd 100 rt 90]
والسطر التالي
ينتج شكل غير محدب
repeat 4 [fd 50 rt 90 repeat 3 [fd 25 lt 90] rt 180 fd 50 rt 90]
و لو حاولت أن
تستخدم ذلك السطح في رسم مجسم بتعديله كما
بالبرنامج التالي:
to
aaa
perspective
polystart
repeat 4 [fd 50 rt 90 repeat 3 [fd 25 lt 90] rt 180 fd 50 rt 90]
polyend
end
to
bbb
repeat
4[aaa pu fd 125 down 90]
polyview
end
فسوف
تحصل علي رسالة الخطأ التالية :
فعندما
بدأت لوجو في رسم المسطح التالي فوجئت بوجود
فراغات داخله .
والواقع
أنك المشكلة هي في سلسلة الأوامر polyviewو
polystart
,polyend ،
فلوحذفت تلك الأوامر فسوف تحصل علي الشكل
الفراغي التالي :
و ماذا نعني بتسطح الشكل ؟
ما يلي مقبولا
لأنه لا يستخدم أمر الرفع والخفض والانحدار …
بين تعريف المسطح ونهايته:
repeat 4 [fd 100 rt 90]
ما يلي غير مقبول
:
polystart repeat 4 [fd 50
rr 90 rt 90 repeat 3 [fd 25
lt 90] rt 180 lr 90 fd 50 rt 90]
polyend
فهو ينتج شكل
يشبه المنضدة ، وهو لا يرسم في مستوي.
ولو
حاولت تظليله فسوف يظلل ، ولكن جعله سطح لمكعب
مثلا لا ينتج مجسم
ملحوظة
: علي البندين (2) ، (3):
يمكنك
التحايل علي القيدين 2 ، 3 بتجزيء الشكل
لأجزاء مسطحة تلبي الشروط السابقة
.
فيمكنك
أن تستخدم الدائرة والبيضاوي ، والأقواس.
أمثلة :
مثال: يستخدم
الدائرة
|
to Perspectivecircle
perspective
make "append "false
repeat
18 ~
[
polystart
circle 80
polyend
rr 10
polyview
end
|
|
مثال (يستخدم
الأقواس)
|
TO PerspectiveArc
perspective
repeat 36 ~
[
polystart
arc2 180 50
RT 90
FD 100
RT 90
polyend
rr 10
]
polyview
end
|
|
تطبيقات
:
الآن
لنرسم مجسم المكعب :
|
to cub :size
perspective
repeat 4[ square :size fd :size title up 90
polyview
end
to square :size
polystart
repeat 4[fd :size rt 90]
polyend
End
|
|
|
المكعب يتكون من 6 أوجه كلها
مربعات و لكننا نرسم المكعب بأربعة
مربعات فقط لماذا ؟
|
الاسطوانة :
|
to cylinder :hight :radius
repeat 72 [rectangle :hight :radius rr 5]
polyview
end
to rectangle :hight :width
polystart
repeat 2[fd :hight rt 90 fd :width
rt 90]
polyend
end
|
|
|
الاسطوانة
تنشئ من دوران مستطيل حول طوله . حور
البرنامج لتجعل الاسطوانة تنشئ من دوران
المستطيل حول أحد محاوره
|
الهرم :
|
to phight
localmake "ppp posxyz
localmake "angle 180/:n
localmake "radius
:size/(2*sin :angle)
localmake "xypos list :radius
:hight
make "xypos lput 0 :xypos
setposxyz :xypos
setposxyz :ppp
end
to poly :n :size
repeat :n[fd :size rt 360/:n
phight ]
end
to pyramid :n :hight :width
down 90
poly :n :width
end
|
pyramid 4 148 120
|
|
فكر
في تطوير البرنامج السابق لكي يرسم الهرم
مجسماً
انقر
الهرم لتشاهد البرنامج
|
|
|
قمة الهرم لم تضم الإحداثي
العيني ، طور البرنامج ليأخذ في الاعتبار
ذلك الإحداثي.
|
ملحوظة : قبل أن تطبق الأمر Localmake لن يعمل
|