'progetto 17: Disegnare una serie di triangoli equilateri uno interno all'altro ' (CON UN ALTRO METODO) ' In questa soluzione il programma è diviso in tre passi: ' passo 1) vengono calcolate le coordinate del triangolo esterno con il vertice nell'origine degli assi ' (nello schermo corrisponde con l'angolo in alto a sinistra) ' passo 2) Il triangolo viene translato al centro della finestra ' passo 3) Vengono disegnati i successivi triangoli calcolando il punto medio di ognuno dei lati del triangolo precedente ' (per esempio il nuovo punto A sarà all'interno del segmento AB, ecc.) NOMAINWIN WindowWidth = 600 'larghezza WindowHeight = 600 'altezza UpperLeftX = 400 UpperLeftY = 100 OPEN "Progetto 17" FOR graphics_nsb AS #prog17 #prog17 "trapclose [quit]" #prog17 "fill yellow" 'dimensione del lato del triangolo esterno lato=WindowWidth*0.9 '(appena più piccolo della finestra) 'coordinate dei vertici (in questo momento il triangolo è pensato con ' il vertice superiore nell'origine degli assi) xC=0 yC=0 xA=INT(lato/2) xA=xA*(-1) yA=INT((lato*sqr(3))/2) xB=INT(lato/2) yB=INT((lato*sqr(3))/2) ' traslazione assi (per centrare il triangolo nella finestra) dx=int(WindowWidth/2)-5 ' (tenendo conto anche dello spessore della cornice) dy=10 xC=xC+dx yC=yC+dy xA=xA+dx yA=yA+dy xB=xB+dx yB=yB+dy #prog17, "DOWN" #prog17 "COLOR blue" #prog17 "SIZE 3" DO 'disegno 'segmento AB #prog17, "LINE "; xA; " "; yA; " "; xB; " "; yB 'segmento BC #prog17, "LINE "; xB; " "; yB; " "; xC; " "; yC 'segmento CA #prog17, "LINE "; xC; " "; yC; " "; xA; " "; yA ' triangoli successivi ' prima di modificarli, salvo le coordinate del punto A x=xA y=yA ' le nuove coordinate di A saranno fra il punto A e il punto B xA=INT((xA+xB)/2) yA=INT((yA+yB)/2) ' le nuove coordinate di B saranno fra il punto B e il punto C xB=INT((xB+xC)/2) yB=INT((yB+yC)/2) ' le nuove coordinate di C saranno fra il punto C e il punto A (prima della modifica) xC=INT((xC+x)/2) yC=INT((yC+y)/2) LOOP Until abs(xA-xB) <2 'la funzione abs calcola il valore assoluto di un numero: 'se la differenza fra le due coordinate è minore di due, 'si smette di disegnare WAIT [quit] 'CONFIRM "Vuoi veramente uscire?"; risposta$ 'IF risposta$ = "no" THEN WAIT CLOSE #prog17 END