;;;SUM of integer (natural numbers) #2 ;;;copyright 2006 Takaya Iwamoto ;;;used sumcube_1.lsp as base template ;;;July 20, 2006 Takaya Iwamoto ;;;July 24, 2006 formatted using vlide ;;; ;;;8 Triangular numbers plus 1 is equal to (2n+1)^2 ;;; (defun c:sumint_2 () (setup_sumint2) (while (= (Yes_or_No "Go to next step ?") "_Y") (N_sqr nstep) (IF (= JPG_Yes 1) (make_jpg) ) (setq nstep (1+ nstep)) ) ;;;end of while loop ;draw a base line for the stair case (command "_.pline" (list (- 1 nstep) (- 1 nstep)) "_width" 0.2 "" (list 0 (- 1 nstep)) "") (alert "\nMake a mirror image of this stair case") (while EL1 (ssadd EL1 ss1) (setq EL1 (entnext EL1)) ) (command "_.mirror" ss1 "" '(0 0) '(0 -5) "") (setq p0 '(0 0) p_end (list 0 (- 1 nstep)) ) (command "_.pline" p0 "_Width" 0.2 "" p_end "") (IF (= JPG_Yes 1) (make_jpg) ) (command "_.delay" 100) (alert "\nmake a block of 2 staircases") (setq EL2 (entnext)) (while EL2 (ssadd EL2 ss2) (setq EL2 (entnext EL2)) ) (command "_.copy" ss2 "" '(0 0) "") (if (= icad 0)(command "_.block" "qtr_unit" '(0 0) ss2 "") (command "block" "qtr_unit" '(0 0) ss2 "") ) (IF (= JPG_Yes 1) (make_jpg) ) (command "_.delay" 100) (alert "\nCopy & rotate this unit 90, 180, 270 degrees") (command "_.insert" "qtr_unit" "0,1" "" "" 90.) (command "_.chprop" "_all" "" "_c" "red" "") (IF (= JPG_YES 1) (make_jpg) ) (command "_.delay" 1500) (command "_.insert" "qtr_unit" "-1,1" "" "" 180.) (IF (= JPG_YES 1) (make_jpg) ) (command "_.delay" 1500) (command "_.insert" "qtr_unit" "-1,0" "" "" 270.) (IF (= JPG_YES 1 1) (make_jpg) ) (command "_.delay" 1500) (alert "\nAdd lines & texts") (final_text) (reset_sysvar) (command "_.pline" '(-100 -100) "_width" 0. 0. "") ;;reset pline width 1-20/2005 (IF (= JPG_YES 1) (make_jpg) ) ) ;;;SUMINT_2 ;;; ;;; ;;;Final_text ;;; (defun final_text ( / mnstep mnstep_1 pnstep_1 pnt_left pnt_right pnt_up pnt_down down_left down_right right_up right_down title pnt_title ) (setq mnstep (- nstep) mnstep_1 (- 1 nstep) pnstep_1 (+ 1 nstep) pnt_left (list mnstep mnstep) pnt_right (list (- nstep 1) mnstep) pnt_up (list nstep nstep) pnt_down (list nstep mnstep_1) down_left (shift_pnt pnt_left '(0 -0.5)) down_right (shift_pnt pnt_right '(0 -0.5)) right_up (shift_pnt pnt_up '(0.5 0)) right_down (shift_pnt pnt_down '(0.5 0)) ) (make_line_1 "0" 0 pnt_left down_left) (make_line_1 "0" 0 pnt_right down_right) (make_line_1 "0" 0 pnt_up right_up) (make_line_1 "0" 0 pnt_down right_down) ;;texts and lines (line_text down_left down_right 0.30 "2N + 1" 0.75 -2.0 -0.5) (line_text right_down right_up 0.30 "2N + 1" 0.75 0.5 -2) ;;title (setq title "8 T(n) + 1 = (2n + 1) ^2" pnt_title (list (- (1+ nstep)) (+ nstep 2)) ) (textdisplay title pnt_title 1.0 0.) (command "_.zoom" "_EXTENT") );;;FINAL_TEXT ;;;SETUP_SUMINT2 ;;; (defun setup_sumint2 ( / lower_left upper_right p0 p1 p2) (setup_sysvar) (setq nstep 1 lower_left '(-10 -10) upper_right '(10 10) ) ;draw N squares ;(setq sqr_plate "white_plate3") (setq sqr_plate "white_hatch") (my_block_insert sqr_plate '(-1 -1) 1.0) ;draw a boundary line p0,p1,p2 (setq p0 '(-1 -1) p1 (shift_pnt p0 '(0 1)) p2 (shift_pnt p0 '(1 1)) ) (command "_.pline" p0 "_Width" 0.2 "" p1 "_Width" 0.11 "" p2 "") (setq nstep (1+ nstep)) (setq ss1 nil ss1 (ssadd) ss2 nil ss2 (ssadd) ) (setq EL1 (entnext)) (command "_.zoom" "_W" lower_left upper_right) (IF (= JPG_YES 1) (make_jpg) ) ) ;;;setup_sumint2 ;;; ;;;N_sqr ;;; (defun N_sqr (num / p0 p1 p2 pnt_base x_start) (setq x_start (- num) pnt_base (list x_start x_start) ) (my_block_insert sqr_plate pnt_base 1.0) (if (= ICAD 0) (command "_.array" (entlast) "" "_R" 1 num 1 1) (command "array" (entlast) "" "R" 1 num 1 ) ) (setq p0 pnt_base p1 (shift_pnt p0 (list 0 1)) p2 (shift_pnt p0 (list 1 1)) ) (command "_.pline" p0 "_Width" 0.2 "" p1 "_Width" 0.11 "" p2 "") ) ;;;N_SQR ;;; ;;;SUM_N ;;; (defun sum_n (num) (setq sum (/ (* num (1+ num)) 2)) ) ;;;SUM_N ;;;Dimension-like text insert utility ;;;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 ;;; ;;;