วันศุกร์ที่ 10 สิงหาคม พ.ศ. 2561

กรวยยอดตัด(CONE)

กรวยยอดตัด(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สิ้นสุดคำสั่ง

); สิ้นสุดฟังก์ชัน