;;;Successive approximation of Delian problem--Pappus ;;; Approximation_Delian.lsp ;;; ;;; Started on Jan 19, 2006 by Takaya Iwamoto ;;;Ref "A History of Greek Mathematics" by Sir Thomas Heath ;;; page 268-270 ;;; (defun C:Approximation_Delian( ) (setup_approx_delian) (make_jpg) ;;;Now start the process (alert "\nLine L-L'") ;step 1:define n as mid point of LM (setq pnt_n (plt pnt_l pnt_m 0.5)) (make_pt "0" 0 pnt_n) (mark_point pnt_n 1. 0 "N" chr_size) ;;make points P,Q on line L-L' such that ;;LL': NL' = NL' : PL' = PL' : QL' (setq ratio_1 (/ (distance pnt_l pnt_n) 4.) pnt_p (plt pnt_n pnt_ld ratio_1) pnt_q (plt pnt_p pnt_ld ratio_1) ) (make_pt "0" 0 pnt_p) (make_pt "0" 0 pnt_q) (mark_point pnt_p 1. -1 "P" chr_size) (mark_point pnt_q 1. 0 "Q" chr_size) ;connect RQ (make_line_1 "0" 8 pnt_r pnt_q) (setq line_rq (entlast)) ;draw a line through point N parallel to line rq (command "_.copy" line_rq "" pnt_q pnt_n) (setq line_qn (entlast)) (setq Pnt_temp (cdr (assoc 10 (entget line_qn)))) (setq pnt_s (inters pnt_r pnt_l pnt_n pnt_temp)) (setq y_s (cadr pnt_s)) (make_pt "0" 0 pnt_s) (mark_point pnt_s 0. 0.5 "S" chr_size) (make_jpg) ;;----------draw horizontal line ST---------------------- (setq pnt_t (list 6 y_s)) (make_pt "0" 0 pnt_t) (mark_point pnt_t 1. 0 "T" chr_size) (make_line_1 "0" 8 pnt_s pnt_t) (make_jpg) ;;------------------------------------------------------- ;;;move to line G-G' (alert "\nLine G-G'") (make_line_1 "0" 8 pnt_w pnt_g) (setq ratio_2 (/ (distance pnt_g pnt_t) 4.) pnt_o (plt pnt_t pnt_gd ratio_2) pnt_u (plt pnt_o pnt_gd ratio_2) ) (make_pt "0" 0 pnt_o) (make_pt "0" 0 pnt_u) (mark_point pnt_o 1. 0 "O" chr_size) (mark_point pnt_u 1. 0 "U" chr_size) ;;connect UW (make_line_1 "0" 8 pnt_w pnt_u) (setq line_wu (entlast)) ;draw a line through point T parallel to line WU (command "_.copy" line_wu "" pnt_u pnt_t) (setq line_ti (entlast)) (setq Pnt_temp (cdr (assoc 10 (entget line_ti)))) (setq pnt_i (inters pnt_w pnt_g pnt_t pnt_temp)) (setq y_i (cadr pnt_i)) (make_pt "0" 0 pnt_i) (mark_point pnt_i 0.2 0.5 "I" chr_size) (make_jpg) ;;----------draw horizontal line IV ---------- (setq pnt_v (list 2 y_i)) (make_pt "0" 0 pnt_v) (mark_point pnt_v 1. 0 "V" chr_size) (make_line_1 "0" 8 pnt_i pnt_v) (make_jpg) ;;-------------------------------------------- ;;move to line C-C' (alert "\nLine C-C'") (setq ratio_3 (/ (distance pnt_c pnt_v) 4.) pnt_x (plt pnt_v pnt_cd ratio_3) pnt_y (plt pnt_x pnt_cd ratio_3) ) (make_pt "0" 0 pnt_x) (make_pt "0" 0 pnt_y) (mark_point pnt_x 1. 0 "X" chr_size) (mark_point pnt_y 1. 0 "Y" chr_size) (make_jpg) ;;connect DY (make_line_1 "0" 8 pnt_d pnt_y) (setq line_dy (entlast)) (alert "\nLine E-C") ;draw a line through point X parallel to line DY (command "_.copy" line_dy "" pnt_y pnt_x) (setq line_t1 (entlast)) ;draw a line through point V parallel to line DY (command "_.copy" line_dy "" pnt_y pnt_v) (setq line_t2 (entlast)) (setq Pnt_temp1 (cdr (assoc 10 (entget line_t1)))) (setq pnt_z (inters pnt_e pnt_c pnt_temp1 pnt_x)) (make_pt "0" 0 pnt_z) (mark_point pnt_z 0.1 0.1 "Z" chr_size) (setq Pnt_temp2 (cdr (assoc 10 (entget line_t2)))) (setq pnt_zd (inters pnt_e pnt_c pnt_temp2 pnt_v)) (make_pt "0" 0 pnt_zd) (mark_point pnt_zd 0.1 0.1 "Z'" chr_size) (make_jpg) (alert "\nLine E-B") ;;get y_coordinate value for pnt_z & pnt_zd (setq y_z (cadr pnt_z) y_zd (cadr pnt_zd) pnt_xd (list 0 y_z) pnt_yd (list 0 y_zd) ) (make_pt "0" 0 pnt_xd) (make_pt "0" 0 pnt_yd) (mark_point pnt_xd -2 0. "X'" chr_size) (mark_point pnt_yd -2 0. "Y'" chr_size) (make_jpg) ;;;draw line x'-z and y'-z' (make_line_1 "0" 1 pnt_xd pnt_z) (make_line_1 "0" 3 pnt_yd pnt_zd) (make_jpg) ;;;result display (show_result) (make_jpg) (reset_sysvar) );;;APPROXIMATION_DELIAN ;;; ;;; ;;; (defun show_result() (textdisplay "1" '(0.3644 2.0623 ) 0.3 0.) (textdisplay "2" '(0.3789 1.5680 ) 0.3 0.) (textdisplay "2" '(0.4080 0.8992 ) 0.3 0.) (textdisplay "2" '(0.4372 0.0706 ) 0.3 0.) (textdisplay "1/3" '(0.5682 1.7715 ) 0.19 0.) (textdisplay "2/3" '(0.6119 1.1464 ) 0.19 0.) ) ;;; ;;; (defun setup_approx_delian() (setup_sysvar) (setvar "PDMODE" 32) (setvar "PDSIZE" -3) ;;;define all grids (setq pnt_a '(0 2) pnt_b '(0 0) pnt_c '(2 0) pnt_d '(1 2) pnt_e '(0 4) pnt_f '(4 0) pnt_g '(6 0) pnt_k '(8 0) pnt_l '(10 0) pnt_cd '(2 4) pnt_fd '(4 4) pnt_gd '(6 4) pnt_kd '(8 4) pnt_ld '(10 4) pnt_r '(8 2) pnt_m '(10 2) pnt_w '(4 2) ) ;;;draw grid lines (make_line_1 "0" 8 pnt_b pnt_e) (make_line_1 "0" 8 pnt_c pnt_cd) (make_line_1 "0" 8 pnt_f pnt_fd) (make_line_1 "0" 8 pnt_g pnt_gd) (make_line_1 "0" 8 pnt_k pnt_kd) (make_line_1 "0" 8 pnt_l pnt_ld) (make_line_1 "0" 8 pnt_b pnt_l) (make_line_1 "0" 8 pnt_e pnt_ld) (make_line_1 "0" 8 pnt_c pnt_e) (make_line_1 "0" 8 pnt_r pnt_m) (make_line_1 "0" 8 pnt_r pnt_l) (make_line_1 "0" 2 pnt_a pnt_d) (make_line_1 "0" 2 pnt_b pnt_c) ;;make nodes (make_pt "0" 0 pnt_a) (make_pt "0" 0 pnt_b) (make_pt "0" 0 pnt_c) (make_pt "0" 0 pnt_d) (make_pt "0" 0 pnt_e) (make_pt "0" 0 pnt_f) (make_pt "0" 0 pnt_g) (make_pt "0" 0 pnt_k) (make_pt "0" 0 pnt_l) (make_pt "0" 0 pnt_cd) (make_pt "0" 0 pnt_fd) (make_pt "0" 0 pnt_gd) (make_pt "0" 0 pnt_kd) (make_pt "0" 0 pnt_ld) (make_pt "0" 0 pnt_r) (make_pt "0" 0 pnt_m) (make_pt "0" 0 pnt_w) ;;mark Grid ID (setq chr_size 0.2) (mark_point pnt_a -2 0. "A" chr_size) (mark_point pnt_b -2 -1.2 "B" chr_size) (mark_point pnt_c 0. -1.2 "C" chr_size) (mark_point pnt_d 0. 0.2 "D" chr_size) (mark_point pnt_e -2 0. "E" chr_size) (mark_point pnt_f 0. -1.2 "F" chr_size) (mark_point pnt_g 0. -1.2 "G" chr_size) (mark_point pnt_k 0. -1.2 "K" chr_size) (mark_point pnt_l 1. -1.2 "L" chr_size) (mark_point pnt_cd 0. 0.2 "C'" chr_size) (mark_point pnt_fd 0. 0.2 "F'" chr_size) (mark_point pnt_gd 0. 0.2 "G'" chr_size) (mark_point pnt_kd 0. 0.2 "K'" chr_size) (mark_point pnt_ld 1. 0.2 "L'" chr_size) (mark_point pnt_r -1.2 0. "R" chr_size) (mark_point pnt_m 1. -0.5 "M" chr_size) (mark_point pnt_w -1.5 0 "W" chr_size) (command "_.zoom" "_Extent") (command "_.regen") );;;SETUP_APPROX_DELIAN