กรวยยอดตัด(CONE)
เรามาลองทำ Project ที่ใช้ในการทำงานจริงๆ กันบ้าง การสร้างกรวยยอดตัด
พร้อมกับแบบแผ่นคลี่ จะได้เห็นภาพกันชัดๆ และแสดงฟังชั่นการใช้งานไปด้วยเลย เช่นการคำนวณมุมต่างๆ
Sin Cos aTan และเมื่อพูดถึงตรีโกณมิติ หลายคนคง...ว้าเอาอีกแล้วเกาหัวรอเลยนะ ผมเองก็เหมือนกันนะแหละจำไม่ได้หรอก
ต้องหาตัวช่วยตลอดเลย จะใช้ทีก็เปิดหาที ตามตารางมุมนี้เลย
ตารางค่ามุม
ส่วนของวงกลม
ในการที่จะออกแบบโปรแกรมอะไรสักอย่างหนึ่ง
เราจะต้องทำการวางแผนขั้นตอนการทำงานต่างๆ หรือร่างแบบออกมาก่อน ว่าเราต้องใช้คำสั่งใดบ้างหรือเราต้องกำหนดค่าใดบ้างในโปรแกรมของเรา
ตัวอย่างที่ 27
ในรูป ตัวอย่างที่ 27
กรวยยอดตัดของเรานั้นเราต้องกำหนดค่า input
3 ค่าด้วยกันแล้วก็กำหนดจุดเริ่มต้นด้วยหนึ่งจุด ค่าแรกคือ diamax ขนาดของฐานกรวยใหญ่
ค่าที่สองคือ diamin ขนาดของยอดกรวยบน ค่าที่สาม he (Height) ความสูงของกรวยตัด
แล้วสุดท้ายคือ cen เป็นการเลือกจุดศูนย์กลางของกรวยที่เราคลี่ออกมา
ไปลุยกันเลย
(defun c:cop () ; ตั้งชื่อโปรแกรมของเรา cop (cone pattern) ให้การตั้งชื่อให้เราตรวจสอบด้วยว่าไปซ้ำ กับ คำสั่งใดๆ ใน AutoCAD หรือไม่โดยลองพิมพ์ที่ command: ว่าชื่อที่เราตั้งซ้ำหรือไม่ถ้าซ้ำก็ ให้เปลี่ยนใหม่ ซึ่งชื่อโปรแกรมของเราไม่ควรซ้ำกับคำสั่งใดๆเลย
(setq diamax (getdist "\n Max Diameter <20.0>: ")) ; กำหนดค่าตัวแปร diamax ฐานกรวย(ใหญ่) โดยการใส่ค่าที่ต้องการ ด้วย getdist ใส่เลขจำนวนเต็มหรือเลขจำนวนจริง
(if (not diamax) (setq diamax 20.0)) ; ทำการทดสอบตัวแปร diamax ด้วยฟังชั่น if ถ้าไม่ได้ใส่ขนาดฐาน กรวย (ใหญ่) หรือกด Enter ผ่านไป ให้ตั้งค่าเริ่มต้น diamax เป็น 20.0
(setq diamin (getdist "\n Min Diameter <10.0>: ")) ; กำหนดค่าตัวแปร diamin ยอดกรวย(เล็ก)โดย การใส่ค่าที่ต้องการด้วย getdist ใส่เลขจำนวนเต็มหรือเลขจำนวนจริง
(if (not diamin) (setq diamin 10.0)) ; ทำการทดสอบตัวแปร diamin ด้วยฟังชั่น if ถ้าไม่ได้ใส่ขนาดยอด กรวย (เล็ก) หรือกด Enter ผ่านไป ให้ตั้งค่าเริ่มต้น diamin เป็น 10.0
(setq he (getdist "\n Height of cone <20.0> : ")) ; กำหนดค่าตัวแปร he (Height) ความสูงของกรวยตัด โดยการใส่ค่าที่ต้องการด้วย getdist ใส่เลขจำนวนเต็มหรือเลขจำนวนจริง
(if (not he) (setq he 20.0)) ; ทำการทดสอบตัวแปร he (Height) ด้วยฟังชั่น if ถ้าไม่ได้ใส่ขนาดความสูง หรือกด Enter ผ่านไป ให้ตั้งค่าเริ่มต้น he (Height) เป็น 20.0
(initget 1) ; กำหนดค่า bit 1 ไม่ให้ Enter ผ่านไปให้ใช้การเลือกตำแหน่งเท่านั้น
(setq cen (getpoint "\n Pick Center Point : ")) ; กำหนดค่าตัวแปร cen เป็นการเลือกจุดศูนย์กลางของ กรวยที่เราจะทำการคลี่ ด้วย getpoint เลือกจุดพิกัดหรือตำแหน่ง
(setq rx (/ diamax 2)) ; กำหนดค่าตัวแปร rx เป็นรัศมีของฐานกรวย (ใหญ่)
(setq rn (/ diamin 2)) ; กำหนดค่าตัวแปร rn เป็นรัศมีของยอดกรวย (เล็ก)
(setq dr (- rx rn)) ; กำหนดค่าตัวแปร dr เป็นระยะฐานของสามเหลี่ยม โดยใช้รัศมี rx – rn เพี่อที่จะใช้หามุม beta ต่อไป
(setq beta1 (atan (/ he dr))) ; กำหนดค่าตัวแปร beta1 เป็นค่ามุมที่เราต้องการหาเพื่อที่จะนำไปหาค่า ความยาวจริงของสามเหลี่ยมโดยใช้ atan (อาร์คแทน) หาค่าจาก ความสูง he (Height) หารด้วยระยะของฐานสามเหลี่ยม dr มุมที่ได้จะมีหน่วยเป็น radian (เรเดียน) * สูตรจาก ตารางมุม
(setq h1 (/ dr (cos beta1))) ; กำหนดค่าตัวแปร h1 เป็นค่าความยาวจริงที่เราต้องการ โดยหาจากความ ยาวฐานของสามเหลี่ยม dr หารด้วยค่า (cos ของมุม beta1) * สูตรจากตารางมุม
(setq h1 (sqrt (+ (expt he 2) (expt dr 2)))) ; กำหนดค่าตัวแปร h1 เป็นค่าความยาวจริงที่เราต้องการ โดยหาจากความสูง he(Height) และความยาวฐานของสามเหลี่ยม dr ถ้าเราทราบค่าทั้ง สองนี้เราสามารถหาความยาว h1 ได้อีกแบบคือ h1 = he2 + dr2 คือ สแควรูท he ยก กำลัง 2 + dr ยกกำลัง 2 *ให้เราเลือกเอาว่าจะใช้อันใดก็ได้ตามสะดวก
(setq r1 (/ rn (cos beta1))) ; กำหนดค่าตัวแปร r1 เป็นค่าความยาวจริงของกรวยบนที่เราต้องการ โดยหา จากความยาวฐานของสามเหลี่ยม rn หารด้วยค่า (cos ของมุม beta1) *สูตรจากตารางมุม ซึ่งเราจะใช้ในการวาดแผ่นคลี่
(setq r2 (+ r1 h1)) ; กำหนดค่าตัวแปร r2 เป็นค่าความยาวจริงของกรวย (ยอดแหลมจากฐาน) ที่เรา ต้องการโดยหาจากความยาว (+ r1 h1) ซึ่งเราจะใช้ในการวาดแผ่นคลี่
(setq cirn (* 2 pi rn)) ; กำหนดค่าตัวแปร cirn เป็นค่าความยาวจริงของเส้นรอบวงยอดกรวย (เล็ก) สอง พายอาร์ (rn รัศมียอดกรวยเล็ก)
(setq cirx (* 2 pi rx)) ; กำหนดค่าตัวแปร cirx เป็นค่าความยาวจริงของเส้นรอบวงฐานกรวย (ใหญ่) สองพาย อาร์ (rx รัศมีฐานกรวยใหญ่)
(setq Beta2 (/ cirn r1)) ; กำหนดค่าตัวแปร beta2 เป็นค่ามุมที่เราต้องการหาเพื่อที่จะนำไปใช้ในการวาด รูปแผ่นคลี่จริง จากสูตรในส่วนของวงกลม คือความยาวของเส้นรอบวง cirn หารด้วยค่า ความยาวจริงของกรวย r1 มุมที่ได้จะมีหน่วยเป็น radian (เรเดียน)
; set position ต่อไปเป็นการกำหนดตำแหน่งเพื่อจะใช้ในการวาดแผ่นคลี่
(setq p1 (polar cen 0 r1)) ; กำหนดค่าตัวแปร p1 เป็นจุดเริ่มของการวาดแผ่นคลี่ โดยใช้คำสั่ง polar จาก จุด cen ที่เราได้เลือกเอาไว้แล้วเป็นจุดอ้างอิง ชี้ทิศทางไปยัง 0 องศาจาก ตัวอย่างที่ 17 โดย ให้ระยะจากค่าความยาวจริงของกรวยบน r1
(setq p2 (polar cen Beta2 r1)) ; กำหนดค่าตัวแปร p2 เป็นจุดที่สองของการวาดแผ่นคลี่ โดยใช้คำสั่ง polar จากจุด cen ที่เราได้เลือกเอาไว้แล้วเป็นจุดอ้างอิง ชี้ทิศทางไปยังองศาที่ได้จาก การ คำนวณ beta2 โดยให้ระยะจากค่าความยาวจริงของกรวยบน r1
(setq p3 (polar cen 0 r2)) ; กำหนดค่าตัวแปร p3 เป็นจุดที่สามของการวาดแผ่นคลี่ โดยใช้คำสั่ง polar จากจุด cen ที่ ชี้ทิศทางไปยัง 0 องศา โดยให้ระยะจากค่าความยาวจริงของกรวย (ยอด แหลมจากฐาน) คือ r2
(setq p4 (polar cen Beta2 r2)) ; กำหนดค่าตัวแปร p4 เป็นจุดที่สี่ของการวาดแผ่นคลี่ โดยใช้คำสั่ง polar จากจุด cen ที่ ชี้ทิศทางไปยังองศาที่ได้จาก การคำนวณ beta2 โดยให้ระยะจากค่าความ ยาวจริงของกรวย(ยอดแหลมจากฐาน) คือ r2
; Pattern Drawing ส่วนนี้เป็นการวาดรูปแผ่นคลี่ตามจุดต่างๆที่เราได้กำหนดเอาไว้
(command "ARC" p1 "c" cen p2) ; เราจะใช้คำสั่ง arc ในการเขียนส่วนโค้ง โดยเริ่มจากจุด p1 โดยเลือก options เป็น "c" คือ center ที่ตัวแปร cen แล้วก็วาดเส้นโค้งจากจุด p1 ไปยังจุด p2 จะ ได้ความยาวส่วนโค้งเท่ากับ cirn เส้นรอบวงยอดกรวย (เล็ก)
(command "ARC" p3 "c" cen p4) ; ใช้คำสั่ง arc ในการเขียนส่วนโค้งที่สอง โดยเริ่มจากจุด p3 โดยเลือก options เป็น "c" คือ center ที่ตัวแปร cen แล้วก็วาดเส้นโค้งเช่นเดียวกันกับส่วนโค้งแรก วาดเส้นโค้งจากจุด p3 ไปยังจุด p3 จะได้ความยาวส่วนโค้งเท่ากับ cirx เส้นรอบวงฐาน กรวย (ใหญ่)
(command "LINE" p1 p3 "") ; ใช้คำสั่ง line ในการเขียนตรง โดยเริ่มจากจุด p1และ p3
(command "LINE" p2 p4 "") ; ใช้คำสั่ง line ในการเขียนตรง โดยเริ่มจากจุด p2 และ p4
(princ) ; ลบechoสิ้นสุดคำสั่ง
); สิ้นสุดฟังก์ชัน