(prompt "\nPlanets_motion by AutoCAD - planets_motion.LSP") (prompt "\nCommands: earth_venus_1 earth_venus_1_color earth_venus_2 ") (prompt "\nCommands: earth_venus_2_color earth_venus_3_a ") (prompt "\nCommands: earth_venus_3_b earth_venus_3_c ") (prompt "\nCommands: planets_a planets_b draw_epi_cycloid ") (prompt "\n ") ;---------------------------------------------------------- ;;Takaya Iwamoto Nov 13,2006 ;;ref. A little book of Coincidence (Pattern in the Solar system) ;; by John Martineau Wooden Books 2001 ;; ;;data ;; Planets mean orbit(e+6 km) Tropical year(days) ;; ;; Mercury 57.91 87.968 ;; Venus 108.21 224.695 ;; Earth 149.60 365.242 ;; Mars 227.92 686.973 ;; Jupiter 778.57 4330.6 ;; Saturn 1433.5 10746.9 ;; Uranus 2872.46 30589. ;; Neptune 4495.1 59800. ;; ;;;****planets_motion.LSP ;;; planets_a two planets with Sun at the center ;;; planets_b two planets with ref at the center and the other ;;; rotating around the Sun (epi-cycloid like) ;;;executables related to Earth-Venus ;;; earth_venus_1 Sun at the center ;;; earth_venus_1_color .. ;;; earth_venus_2 Earth at the center (epi-cycloid model) ;;; earth_venus_2_color .. ;;; earth_venus_3_a .. ;;; earth_venus_3_b .. ;;; earth_venus_3_c .. ;;; earth_venus_3_d .. ;;; ;;; draw_epi_cycloid ;;; use inner radius=40, outer radius = 104, total angle =4680(13 years) ;;; note:radius ratio = 5/13 ;;; actual data 41.39, 108.21 (earth-venus combination) ;;; ratio of tropical year = 224.695/365.242 = 8/13 ;;; will make the actual cycle from 13 years to 8. ;;; ;;;main ;;;Sun at the center ;;;Planets_a ;;; (defun c:planets_a() (setup_planets_a) ;;repeat loop (repeat n_repeat (entdel ref_pos) (entdel cmp_pos) (setq deg (* step step_deg) rad (dtr deg) v_rad (* ratio rad) pnt_ref (list (* ref_orb (cos rad)) (* ref_orb (sin rad))) pnt_cmp (list (* cmp_orb (cos v_rad)) (* cmp_orb (sin v_rad))) ) (make_line_1 "0" 8 pnt_ref pnt_cmp) (my_block_insert "yellow_ball" pnt_cmp 5.0 ) (setq cmp_pos (entlast)) (my_block_insert "green_ball" pnt_ref 5.0 ) (setq ref_pos (entlast)) (if (= ICAD 0) (command "shademode" "G")) (setq step (1+ step)) (command "_.delay" delay_time) ) ;;;end of loop (reset_sysvar) ) ;;; ;;; ;;;Planets_b reference (observer's) planet at the center ;;; (defun c:planets_b() (setup_planets_b) ;;repeat loop (repeat n_repeat (entdel ref_pos) (entdel cmp_pos) (setq deg (* step step_deg) rad (dtr deg) v_rad (+ pi (* ratio rad)) pnt_ref (list (* ref_orb (cos rad)) (* ref_orb (sin rad))) pnt_cmp (list (* cmp_orb (cos v_rad)) (* cmp_orb (sin v_rad))) r_len (distance pnt_ref pnt_cmp) theta (angle pnt_ref pnt_cmp) cmp_pos_new (polar pnt_s theta r_len) theta_s (angle pnt_ref pnt_s) ref_pos_new (polar pnt_s theta_s ref_orb) ) (make_line_1 "0" 8 cmp_pos_new cmp_pos_old) (my_block_insert "yellow_ball" cmp_pos_old 5.0 ) (setq cmp_pos (entlast)) (my_block_insert "red_ball" ref_pos_old 10.0 ) (setq ref_pos (entlast)) (if (= ICAD 0) (command "shademode" "G")) (setq step (1+ step)) (setq cmp_pos_old cmp_pos_new ref_pos_old ref_pos_new) (if (= (rem step 10) 0) (make_jpg)) (command "_.delay" delay_time) ) ;;;end of loop (reset_sysvar) ) ;;; ;;;SETUP_planets_a ;;; (defun setup_planets_a() (setup_sysvar) ;;Radii of two planets' orbits (alert "\nInput radii of two planets") (setq ref_orb (getreal "\nradius of reference planet(def=149.60)") cmp_orb (getreal "\nradius of comparison planet(def=108.21)") ) (if (= ref_orb nil) (setq ref_orb 149.60)) (if (= cmp_orb nil) (setq cmp_orb 108.21)) ;;(Earth) Days of Tropical years of two planets (alert "\nInput (earth) days of one tropical year for each planet") (setq ref_day (getreal "\nHow many days in one rotation of reference planet(def=365.242)") cmp_day (getreal "\nHow many days in one rotation of comparison planet(def=224.695)") ) (if (= ref_day nil) (setq ref_day 365.242)) (if (= cmp_day nil) (setq cmp_day 224.695)) ;;Input one step in earth's day (setq e_day (getreal "\none step in earth's day(def=3 )")) (if (= e_day nil) (setq e_day 3.)) (setq pnt_s '(0 0) ratio (/ ref_day cmp_day) step_deg (* e_day (/ 360. ref_day )) pnt_ref (list ref_orb 0.) pnt_cmp (list cmp_orb 0.) sum_orb (+ ref_orb cmp_orb) dif_orb (abs (- ref_orb cmp_orb)) cmp_pos_old (list (- sum_orb) 0.) ref_pos_old (list (- ref_orb) 0.) step 1 ) (setq n_repeat (getint "\nHow many steps(def = 973)")) (if (= n_repeat nil) (setq n_repeat 973)) ;;draw orbits (make_circle_1 "0" 3 pnt_s ref_orb) (setq ref_orbit (entlast)) (make_circle_1 "0" 2 pnt_s cmp_orb) (setq cmp_orbit (entlast)) (make_line_1 "0" 0 pnt_ref pnt_cmp) ;;draw planets--ref in green, cmp in yellow, and sun in red (my_block_insert "green_ball" pnt_ref 5.0 ) (setq ref_pos (entlast)) (my_block_insert "yellow_ball" pnt_cmp 5.0 ) (setq cmp_pos (entlast)) (my_block_insert "red_ball" pnt_s 10.0 ) (setq s_pos (entlast)) (if (= ICAD 0) (command "shademode" "G")) (command "_.zoom" "_E") (setq delay_time (getint "\ndelay speed between position change(def= 50 ms)")) (if (= delay_time nil) (setq delay_time 50)) ) ;;; ;;; ;;;SETUP_planets_b ;;; (defun setup_planets_b() (setup_sysvar) ;;Radii of two planets' orbits (alert "\nInput radii of two planets") (setq ref_orb (getreal "\nradius of reference planet(def=149.60)") cmp_orb (getreal "\nradius of comparison planet(def=108.21)") ) (if (= ref_orb nil) (setq ref_orb 149.60)) (if (= cmp_orb nil) (setq cmp_orb 108.21)) ;;(Earth) Days of Tropical years of two planets (alert "\nInput (earth) days of one tropical year for each planet") (setq ref_day (getreal "\nHow many days in one rotation of reference planet(def=365.242)") cmp_day (getreal "\nHow many days in one rotation of comparison planet(def=224.695)") ) (if (= ref_day nil) (setq ref_day 365.242)) (if (= cmp_day nil) (setq cmp_day 224.695)) ;;Input one step in earth's day (setq e_day (getreal "\none step in earth's days(def=3 )")) (if (= e_day nil) (setq e_day 3.)) (setq pnt_s '(0 0) ratio (/ ref_day cmp_day) step_deg (* e_day (/ 360. ref_day )) pnt_ref (list ref_orb 0.) pnt_cmp (list cmp_orb 0.) sum_orb (+ ref_orb cmp_orb) dif_orb (abs (- ref_orb cmp_orb)) cmp_pos_old (list (- sum_orb) 0.) ref_pos_old (list (- ref_orb) 0.) step 1 ) (setq n_repeat (getint "\nHow many steps(def = 973)")) (if (= n_repeat nil) (setq n_repeat 973)) ;;draw orbits ;;Orbits for Sun(solid), min & max distance from the earth (make_circle_1 "0" 8 pnt_s dif_orb) (make_circle_1 "0" 0 pnt_s ref_orb) (make_circle_1 "0" 8 pnt_s sum_orb) ;;draw planets--ref in green, cmp in yellow, and sun in red (my_block_insert "green_ball" pnt_s 5.0 ) (setq e_pos (entlast)) (my_block_insert "yellow_ball" cmp_pos_old 5.0 ) (setq cmp_pos (entlast)) (my_block_insert "red_ball" ref_pos_old 10.0 ) (setq ref_pos (entlast)) (if (= ICAD 0) (command "shademode" "G")) (command "_.zoom" "_E") (make_jpg) (setq delay_time (getint "\ndelay speed between position change(def= 50 ms)")) (if (= delay_time nil) (setq delay_time 50)) ) ;;; ;;;---------------------------------------------------------------------------------------- ;;; ;;;main ;;; ;;;Earth_Venus ;;; (defun c:earth_venus_1() (setup_e_v) (make_circle_1 "0" 3 pnt_s e_orb) (setq e_orbit (entlast)) (make_circle_1 "0" 2 pnt_s v_orb) (setq v_orbit (entlast)) (make_line_1 "0" 0 pnt_e pnt_v) (my_block_insert "green_ball" pnt_e 5.0 ) (setq e_pos (entlast)) (my_block_insert "yellow_ball" pnt_v 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" pnt_s 10.0 ) (setq s_pos (entlast)) (command "_.zoom" "_E") (make_jpg) (setq delay_time (getint "\ndelay speed between position change(def= 50 ms)")) (if (= delay_time nil) (setq delay_time 50)) (repeat n_repeat (entdel e_pos) (entdel v_pos) (setq deg (* step step_deg) rad (dtr deg) v_rad (* ratio rad) pnt_e (list (* e_orb (cos rad)) (* e_orb (sin rad))) pnt_v (list (* v_orb (cos v_rad)) (* v_orb (sin v_rad))) ) (make_line_1 "0" 8 pnt_e pnt_v) (my_block_insert "yellow_ball" pnt_v 5.0 ) (setq v_pos (entlast)) (my_block_insert "green_ball" pnt_e 5.0 ) (setq e_pos (entlast)) (setq step (1+ step)) (if (= (rem step 10) 0) (make_jpg)) (command "_.delay" delay_time) ) ;;;end of loop (reset_sysvar) ) ;;; ;;;SETUP_E_V ;;; (defun setup_e_v() (setup_sysvar) (if (= ICAD 0) (command "shademode" "G")) (setq e_orb 149.60 v_orb 108.21 e_period 365.242191 v_period 224.695 pnt_s '(0 0) ratio (/ e_period v_period) v_zero 0. e_zero 0. step_deg (* 3. (/ 360. 365.242 )) pnt_e '(149.60 0) pnt_v '(108.21 0) step 1 sum_orb (+ e_orb v_orb) dif_orb (- e_orb v_orb) v_pos_old (list (- sum_orb) 0.) s_pos_old (list (- e_orb) 0.) ) (setq n_repeat (getint "\nHow many steps(def = 973)")) (if (= n_repeat nil) (setq n_repeat 973)) ) ;;; ;;; ;;; (defun c:earth_venus_1_color() (setup_e_v) (make_circle_1 "0" 3 pnt_s e_orb) (setq e_orbit (entlast)) (make_circle_1 "0" 2 pnt_s v_orb) (setq v_orbit (entlast)) (make_line_1 "0" 0 pnt_e pnt_v) (my_block_insert "green_ball" pnt_e 5.0 ) (setq e_pos (entlast)) (my_block_insert "yellow_ball" pnt_v 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" pnt_s 10.0 ) (setq s_pos (entlast)) (command "_.zoom" "_E") (make_jpg) (setq delay_time (getint "\ndelay speed between position change(def= 50 ms)")) (if (= delay_time nil) (setq delay_time 50)) (repeat n_repeat (entdel e_pos) (entdel v_pos) (setq col_id (1+ (fix (/ step 195))) ) ;(setq col_id (rem step 8)) (setq deg (* step step_deg) rad (dtr deg) ;v_rad (+ pi (* ratio rad)) v_rad (* ratio rad) pnt_e (list (* e_orb (cos rad)) (* e_orb (sin rad))) pnt_v (list (* v_orb (cos v_rad)) (* v_orb (sin v_rad))) ) (make_line_1 "0" col_id pnt_e pnt_v) (my_block_insert "yellow_ball" pnt_v 5.0 ) (setq v_pos (entlast)) (my_block_insert "green_ball" pnt_e 5.0 ) (setq e_pos (entlast)) (setq step (1+ step)) (if (= (rem step 10) 0) (make_jpg)) (command "_.delay" 50) ) ;;;end of loop (reset_sysvar) ) ;;; ;;;----------------------------------------------------------------------------------------------------- ;;; ;;; (defun c:earth_venus_2() (setup_e_v) ;;Orbits for Sun(solid), min & max distance from the earth (make_circle_1 "0" 8 pnt_s dif_orb) (make_circle_1 "0" 0 pnt_s e_orb) (make_circle_1 "0" 8 pnt_s sum_orb) ;;identify the position of Earth(green),Venus(yellow) & Sun(red) (my_block_insert "green_ball" pnt_s 5.0 ) (setq e_pos (entlast)) (my_block_insert "yellow_ball" v_pos_old 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" s_pos_old 10.0 ) (setq s_pos (entlast)) (command "_.zoom" "_E") (make_jpg) (setq delay_time (getint "\ndelay speed between position change(def= 20 ms)")) (if (= delay_time nil) (setq delay_time 20)) (repeat n_repeat (setq deg (* step step_deg) rad (dtr deg) v_rad (+ pi (* ratio rad)) pnt_e (list (* e_orb (cos rad)) (* e_orb (sin rad))) pnt_v (list (* v_orb (cos v_rad)) (* v_orb (sin v_rad))) r_len (distance pnt_e pnt_v) theta (angle pnt_e pnt_v) v_pos_new (polar pnt_s theta r_len) theta_s (angle pnt_e pnt_s) s_pos_new (polar pnt_s theta_s e_orb) ) (make_line_1 "0" 8 v_pos_old v_pos_new) (setq step (1+ step)) (setq v_pos_old v_pos_new s_pos_old s_pos_new) (if (= (rem step 10) 0) (make_jpg)) (command "_.delay" 20) ) ;;;end of loop (reset_sysvar) ) ;;; ;;; (defun c:earth_venus_2_color() (setup_e_v) ;;Orbits for Sun(solid), min & max distance from the earth (make_circle_1 "0" 8 pnt_s dif_orb) (make_circle_1 "0" 0 pnt_s e_orb) (make_circle_1 "0" 8 pnt_s sum_orb) ;;identify the position of Earth(green),Venus(yellow) & Sun(red) (my_block_insert "green_ball" pnt_s 5.0 ) (setq e_pos (entlast)) (my_block_insert "yellow_ball" v_pos_old 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" s_pos_old 10.0 ) (setq s_pos (entlast)) (command "_.zoom" "_E") (make_jpg) (setq delay_time (getint "\ndelay speed between position change(def= 20 ms)")) (if (= delay_time nil) (setq delay_time 20)) (repeat n_repeat (setq col_id (1+ (fix (/ step 195))) ) (setq deg (* step step_deg) rad (dtr deg) ;v_rad (* ratio rad) v_rad (+ pi (* ratio rad)) pnt_e (list (* e_orb (cos rad)) (* e_orb (sin rad))) pnt_v (list (* v_orb (cos v_rad)) (* v_orb (sin v_rad))) r_len (distance pnt_e pnt_v) theta (angle pnt_e pnt_v) v_pos_new (polar pnt_s theta r_len) theta_s (angle pnt_e pnt_s) s_pos_new (polar pnt_s theta_s e_orb) ) (make_line_1 "0" col_id v_pos_old v_pos_new) (setq step (1+ step)) (setq v_pos_old v_pos_new s_pos_old s_pos_new) (if (= (rem step 10) 0) (make_jpg)) (command "_.delay" 20) ) ;;;end of loop (reset_sysvar) ) ;;; ;;;------------------------------------------------------------------------------------- ;;; ;;; (defun c:earth_venus_3_a() (setup_e_v) ;;Orbits for Sun(solid), min & max distance from the earth (make_circle_1 "0" 8 pnt_s dif_orb) (make_circle_1 "0" 0 pnt_s e_orb) (make_circle_1 "0" 8 pnt_s sum_orb) ;;identify the position of Earth(green),Venus(yellow) & Sun(red) ;(make_pt "0" 3 pnt_s) ;(make_pt "0" 2 v_pos_old) ;(make_pt "0" 1 s_pos_old) (my_block_insert "green_ball" pnt_s 5.0 ) (setq e_pos (entlast)) (my_block_insert "yellow_ball" v_pos_old 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" s_pos_old 10.0 ) (setq s_pos (entlast)) (command "_.zoom" "_E") (make_jpg) (setq delay_time (getint "\ndelay speed between position change(def= 20 ms)")) (if (= delay_time nil) (setq delay_time 20)) (repeat n_repeat (entdel v_pos) (entdel s_pos) (setq col_id (1+ (fix (/ step 195))) ) (setq deg (* step step_deg) rad (dtr deg) ;v_rad (* ratio rad) v_rad (+ pi (* ratio rad)) pnt_e (list (* e_orb (cos rad)) (* e_orb (sin rad))) pnt_v (list (* v_orb (cos v_rad)) (* v_orb (sin v_rad))) r_len (distance pnt_e pnt_v) theta (angle pnt_e pnt_v) v_pos_new (polar pnt_s theta r_len) theta_s (angle pnt_e pnt_s) s_pos_new (polar pnt_s theta_s e_orb) ) (make_line_1 "0" col_id v_pos_old v_pos_new) (my_block_insert "yellow_ball" v_pos_old 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" s_pos_old 10.0 ) (setq s_pos (entlast)) (setq step (1+ step)) (setq v_pos_old v_pos_new s_pos_old s_pos_new) (if (= (rem step 10) 0) (make_jpg)) (command "_.delay" 20) ) ;;;end of loop (reset_sysvar) ) ;;; ;;; ;;; ;;; (defun c:earth_venus_3_c() (setup_e_v) ;;Orbits for Sun(solid), min & max distance from the earth (make_circle_1 "0" 8 pnt_s dif_orb) (make_circle_1 "0" 0 pnt_s e_orb) (make_circle_1 "0" 8 pnt_s sum_orb) ;;identify the position of Earth(green),Venus(yellow) & Sun(red) (my_block_insert "green_ball" pnt_s 5.0 ) (my_block_insert "yellow_ball" v_pos_old 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" s_pos_old 10.0 ) (setq s_pos (entlast)) (command "_.vpoint" '(0 -1 -0.1)) (command "_.zoom" "_c" pnt_s 510) (command "_.delay" 500) (make_jpg) (setq delay_time (getint "\ndelay speed between position change(def= 50 ms)")) (if (= delay_time nil) (setq delay_time 50)) (repeat n_repeat (entdel v_pos) (entdel s_pos) (setq col_id (1+ (fix (/ step 195))) ) (setq deg (* step step_deg) rad (dtr deg) ;v_rad (* ratio rad) v_rad (+ pi (* ratio rad)) pnt_e (list (* e_orb (cos rad)) (* e_orb (sin rad))) pnt_v (list (* v_orb (cos v_rad)) (* v_orb (sin v_rad))) r_len (distance pnt_e pnt_v) theta (angle pnt_e pnt_v) v_pos_new (polar pnt_s theta r_len) theta_s (angle pnt_e pnt_s) s_pos_new (polar pnt_s theta_s e_orb) ) (my_block_insert "yellow_ball" v_pos_new 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" s_pos_new 10.0 ) (setq s_pos (entlast)) ;(make_line_1 "0" col_id v_pos_new s_pos_new) (setq step (1+ step)) (setq v_pos_old v_pos_new s_pos_old s_pos_new) (if (= (rem step 10) 0) (make_jpg)) (command "_.delay" delay_time) ) ;;;end of loop (reset_sysvar) ) ;;; ;;; ;;; ;;; (defun c:earth_venus_3_b() (setup_e_v) ;;Orbits for Sun(solid), min & max distance from the earth (make_circle_1 "0" 8 pnt_s dif_orb) (make_circle_1 "0" 0 pnt_s e_orb) (make_circle_1 "0" 8 pnt_s sum_orb) ;;identify the position of Earth(green),Venus(yellow) & Sun(red) (my_block_insert "green_ball" pnt_s 5.0 ) (my_block_insert "yellow_ball" v_pos_old 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" s_pos_old 10.0 ) (setq s_pos (entlast)) ;(command "_.vpoint" '(0 -1 -0.1)) (command "_.zoom" "_c" pnt_s 510) (command "_.delay" 500) (make_jpg) (setq delay_time (getint "\ndelay speed between position change(def= 50 ms)")) (if (= delay_time nil) (setq delay_time 50)) (repeat n_repeat (entdel v_pos) (entdel s_pos) (setq col_id (1+ (fix (/ step 195))) ) (setq deg (* step step_deg) rad (dtr deg) ;v_rad (* ratio rad) v_rad (+ pi (* ratio rad)) pnt_e (list (* e_orb (cos rad)) (* e_orb (sin rad))) pnt_v (list (* v_orb (cos v_rad)) (* v_orb (sin v_rad))) r_len (distance pnt_e pnt_v) theta (angle pnt_e pnt_v) v_pos_new (polar pnt_s theta r_len) theta_s (angle pnt_e pnt_s) s_pos_new (polar pnt_s theta_s e_orb) ) (my_block_insert "yellow_ball" v_pos_new 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" s_pos_new 10.0 ) (setq s_pos (entlast)) (make_line_1 "0" col_id v_pos_new s_pos_new) (setq step (1+ step)) (setq v_pos_old v_pos_new s_pos_old s_pos_new) (if (= (rem step 10) 0) (make_jpg)) (command "_.delay" delay_time) ) ;;;end of loop (reset_sysvar) ) ;;; ;;; ;;; ;;; (defun c:earth_venus_3_d() (setup_e_v) ;;Orbits for Sun(solid), min & max distance from the earth (make_circle_1 "0" 8 pnt_s dif_orb) (make_circle_1 "0" 0 pnt_s e_orb) (make_circle_1 "0" 8 pnt_s sum_orb) ;;identify the position of Earth(green),Venus(yellow) & Sun(red) (my_block_insert "green_ball" pnt_s 5.0 ) (my_block_insert "yellow_ball" v_pos_old 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" s_pos_old 10.0 ) (setq s_pos (entlast)) (command "_.vpoint" '(238. -921. -175.)) (command "_.zoom" "_c" pnt_s 510) (command "_.delay" 500) (make_jpg) (setq delay_time (getint "\ndelay speed between position change(def= 50 ms)")) (if (= delay_time nil) (setq delay_time 50)) (repeat n_repeat (entdel v_pos) (entdel s_pos) (setq col_id (1+ (fix (/ step 195))) ) (setq deg (* step step_deg) rad (dtr deg) ;v_rad (* ratio rad) v_rad (+ pi (* ratio rad)) pnt_e (list (* e_orb (cos rad)) (* e_orb (sin rad))) pnt_v (list (* v_orb (cos v_rad)) (* v_orb (sin v_rad))) r_len (distance pnt_e pnt_v) theta (angle pnt_e pnt_v) v_pos_new (polar pnt_s theta r_len) theta_s (angle pnt_e pnt_s) s_pos_new (polar pnt_s theta_s e_orb) ) (my_block_insert "yellow_ball" v_pos_new 5.0 ) (setq v_pos (entlast)) (my_block_insert "red_ball" s_pos_new 10.0 ) (setq s_pos (entlast)) (make_line_1 "0" col_id v_pos_new v_pos_old) (setq step (1+ step)) (setq v_pos_old v_pos_new s_pos_old s_pos_new) (if (= (rem step 2) 0) (make_jpg)) (command "_.delay" delay_time) ) ;;;end of loop (reset_sysvar) ) ;;; ;;; ;;;------------------------------------------------------------------------------------ ;;; ;;;DRAW_EPI_CYCLOID ;;; ;;; x=(a+b)cos(t)-b cos{(a+b)t/b} ;;; y=(a+b)sin(t)-b sin{(a+b)t/b} ;;; where a :inner radius ;;; b :outer radius ;;; t :angle ;;; (defun c:draw_epi_cycloid() (setup_epi_cycloid) (make_jpg) (command "_.delay" 500) ;;repeat loop (repeat n_repeat (setq theta (dtr (* step inc_deg)) theta_1 (* sum_by_out theta) x (- (* rad_sum (cos theta)) (* rad_out (cos theta_1))) y (- (* rad_sum (sin theta)) (* rad_out (sin theta_1))) new_pos (list x y) ) ;(make_pt "0" 0 new_pos) (make_line_1 "0" 8 old_pos new_pos) (setq step (1+ step) old_pos new_pos ) (if (= (rem step 10) 0) (make_jpg)) (command "_.delay" 10) ) ;;end of repeat loop (reset_sysvar) ) ;;; ;;;SETUP_EPI_CYCLOID ;;; (defun setup_epi_cycloid() ;;Input inner & outer circle radii (setup_sysvar) (alert "\nInput Inner & outer circle radii") (setq rad_in (getreal "\nInnner circle radius (def = 1.0)") rad_out (getreal "\nOuter circle radius (def = 1.0)") ) (if (= rad_in nil) (setq rad_in 1.0)) (if (= rad_out nil) (setq rad_out 1.0)) (setq ctr_in '(0 0) rad_sum (+ rad_in rad_out) ctr_out (list rad_sum 0) ref_len (* 1.01 (+ rad_in (* 2. rad_out))) up_right (list ref_len ref_len) low_left (list (- ref_len) (- ref_len)) ) ;;draw two reference circles (make_circle_1 "0" 8 ctr_in rad_in) (make_circle_1 "0" 8 ctr_out rad_out) (command "_.zoom" "_w" low_left up_right) ;;Input range of angle from zero deg to (alert "\nMaximum angle (in deg)") (setq max_ang (getreal "\nMaximum angle (deg) (def = 360.)")) (if (= max_ang nil) (setq max_ang 360.)) ;;Input angle increment (def = 1 deg) (alert "\nInput angle increment(deg) (def = 1.0)") (setq inc_deg (getreal "\nAngle increment (def=1.0)")) (if (= inc_deg nil) (setq inc_deg 1.)) ;; (setq step 0 sum_by_out (/ rad_sum rad_out) n_repeat (fix (/ max_ang inc_deg)) old_pos (list rad_in 0) ) ) ;;; ;;;