;;;SUM of cubes ;;;copyright 2006 Takaya Iwamoto ;;;Ref. Page 87 "Proofs without words" ;;;Update Nov 02,2004 changed ARRAY command to block-copy ;;;Update Apr 24,2005 added JPGout option for documentation ;;;July 31, 2006 copied sumcube_1 --->sumcube_2 ;;; (defun c:sumcube_2 () (setup_sumcube2) (while (= (Yes_or_No "Go to next step ?") "_Y") (NxNxN_sqr nstep) (draw_text nstep) (IF (= JPG_Yes 1) (make_jpg) ) (setq nstep (1+ nstep)) ) ;;;end of while loop (reset_sysvar) (command "_.pline" '(-100 -100) "_width" 0. 0. "") ;;reset pline width 1-20/2005 (IF (= JPG_YES 1) (make_jpg) ) ) ;;;SUMCUBE_2 ;;; ;;;SETUP_SUMCUBE2 ;;; (defun setup_sumcube2 (/ lower_left upper_right) (setup_sysvar) (setq nstep 1 lower_left '(-2 -2) upper_right '(23 23) ) ;draw N section of N x N squares (setq sqr_plate "white_hatch") (my_block_insert sqr_plate '(0 0) 1.0) (command "_.pline" '(0 0) "_Width" 0.1 "" '(1 0) '(1 1) '(0 1) "cl") (setq nstep (1+ nstep) ss1 nil ss1 (ssadd) ) (textdisplay "1" '(0.07 -1.35) 1.0 0.) (textdisplay "1" '(-1.10 0.04) 1.0 0.) (setq EL1 (entnext)) ;selection set for all entities (command "_.zoom" "_W" lower_left upper_right) (IF (= JPG_YES 1) (make_jpg) ) ) ;;;setup_sumcube2 ;;; ;;;NxNxN_sqr ;;; (defun NxNxN_sqr (num / rem_num) (setq x_start (sum_n (1- num)) mx (- x_start) mn (- num) pnt_base (list x_start x_start) rem_num (rem num 7) layer_id (itoa rem_num) mxst (1- x_start) ) (setq layer_name (strcat "layer" layer_id )) (if (= layer_name "layer0") (setq layer_name "0")) (command "_.layer" "Set" layer_name "") (my_block_insert sqr_plate pnt_base 1.0) (command "_.array" (entlast) "" "_R" num num 1 1) (setq p2 (shift_pnt pnt_base (list mx 0)) P3 (shift_pnt pnt_base (list mx num)) p4 (shift_pnt pnt_base (list 0 num)) p5 (shift_pnt pnt_base (list num num)) p6 (shift_pnt pnt_base (list num 0)) p7 (shift_pnt pnt_base (list num mx)) p8 (shift_pnt pnt_base (list 0 mx)) p3_down (shift_pnt p3 '(0 -1)) p4_down (shift_pnt p4 '(0 -1)) p4_left (shift_pnt p4 '(-1 0)) pb_left (shift_pnt pnt_base '(-1 0)) p6_left (shift_pnt p6 '(-1 0)) p7_left (shift_pnt p7 '(-1 0)) pb_down (shift_pnt pnt_base '(0 -1)) p6_down (shift_pnt p6 '(0 -1)) ) (command "_.pline" p2 "_Width" 0.15 "" p3 p5 p7 p8 "") (command "_.pline" p4 "_Width" 0.15 "" pnt_base p6 "") ;;;compute how many boundary lines are required (setq nloop (fix (/ x_start num)) nl_step 1) ;;;if num is even, use this. But if odd, subtract 1 from n1. (if (= (rem num 2) 1) (setq nloop (1- nloop))) (repeat nloop (setq mmn (* nl_step mn)) (setq pvl (shift_pnt pnt_base (list mmn 0)) pvu (shift_pnt pnt_base (list mmn num)) phl (shift_pnt pnt_base (list 0 mmn )) phr (shift_pnt pnt_base (list num mmn)) ) (command "_.pline" pvl "_Width" 0.10 "" pvu "") (command "_.pline" phl "_Width" 0.10 "" phr "") (setq nl_step (1+ nl_step)) ) ;;;draw mesh lines (setq nm2 (- num 2) nm1 (1- num) ) (if (> nm1 0) (progn (make_line_1 layer_name rem_num p3_down p4_down) (setq p34_h (entlast)) (make_line_1 layer_name rem_num p6_left p7_left) (setq p67_v (entlast)) ) ) ;;; (if (> nm2 0) (progn (make_line_1 layer_name rem_num p4_left pb_left) (setq p4b_v (entlast)) (make_line_1 layer_name rem_num p6_down pb_down) (setq p6b_h (entlast)) ) ) (if (> nm2 0) (progn (command "_.array" p34_h "" "R" nm1 1 -1 0) (command "_.array" p67_v "" "R" 1 nm1 -1 0) (command "_.array" p6b_h "" "R" mxst 1 -1 0) (command "_.array" p4b_v "" "R" 1 mxst -1 0) ) ) ) ;;;NXNXN_SQR ;;; ;;;SUM_N ;;; (defun sum_n (num) (setq sum (/ (* num (1+ num)) 2)) ) ;;;SUM_N ;;; ;;;LINE_TEXT ;;; (defun line_text (p1 p2 el string chr_size nh nv / p1e p2e mid_12 dxdy pnt_text text_angle ) (setq p1e (plt p1 p2 el) p2e (plt p2 p1 el) mid_12 (mid_point p1 p2) dxdy (list (* chr_size nh) (* chr_size nv)) pnt_text (shift_pnt mid_12 dxdy) text_angle (rtd (angle p1 p2)) ) (if (/= el 0.0) (progn (make_line_1 "0" 0 p1 p1e) (make_line_1 "0" 0 p2e p2) ) ) (command "_.text" pnt_text chr_size text_angle string "") ) ;;;LINE_TEXT ;;; ;;; ;;; (defun draw_text(num / sumnx sumny x_axis_pos y_axis_pos text_height text_angle) (setq sumny (- (sum_n num) (* 0.6 num)) sumnx (- (sum_n num) (* 0.6 num)) x_axis_pos (list -1.1 sumnx) y_axis_pos (list sumny -1.35) text_height 1.0 text_angle 0. ) (textdisplay (itoa num) x_axis_pos text_height text_angle) (textdisplay (itoa num) y_axis_pos text_height text_angle) ) ;;; ;;;