Δευτέρα 26 Οκτωβρίου 2015

Λουλούδια! (απλό πρόγραμμα)

Ο τίτλος είναι ένα αστείο, γιατί το πρόγραμμα παρακάτω φτιάχνει δυο "περιστρεφόμενα" σχήματα φτιαγμένα με καμπύλες, που απλά φαίνονται ως λουλούδια, με χρήση πολικών συντεταγμένων.

Για να τρέξει ανοίξτε τη Μ2000 γράψτε σ α και κάντε επικόλληση το παρακάτω. Μετά πατάμε Esc ή από το σχετιζόμενο μενού κάνουμε έξοδο και γράφουμε α και πατάμε Enter. Για να κλείσει η γλώσσα γράφουμε Τέλος. Μπορούμε όμως να γράψουμε πριν Σώσε Λουλούδι ώστε την επόμενη φορά να ανοίξουμε την γλώσσα και να φορτώσουμε το πρόγραμμα με την Φόρτωσε Λουλούδι
Προσθήκη δυο εντολών για αργούς υπολογιστές, και η δεύτερη λόγω αναθεώρησης 89, όπου βελτιώθηκε η ταχύτητα εντολών με λίγες αλλαγές ως προς τις ανανεώσεις. Η Ανανέωση 2000 βάζει το μετρητή ανανέωσης στα 2 δευτερόλεπτα. Σε παλιότερες αναθεωρήσεις οι εντολές γραφικών δεν έδιναν εντολή για ανανέωση εικόνας. Τώρα δίνουν με έλεγχο του μετρητή.



Θεσε γρηγορα !
Ανανεωση 2000

Οθόνη 1,0
Φόντο 1,2 ' από μπλε μέχρι πράσινο
Πένα 13
Διπλά
Πάχος 2 {Χρώμα 4 {Τύπωσε "Μ2000",,"Λουλούδια"}} \\ περίγραμμα στα γράμματα
Κανονικά
Πένα 15
Για ι=Πι/10 Έως Πι Ανά Πι/2 {
      μια_τιμή=Τυχαίος(2,15)
      σταθερά1=1400
      σταθερά2=1100
      Για Λ=Πι/16 Έως 2*Πι+Πι/16 Ανά Πι/32 {
            σταθερά2=σταθερά2+55
            σταθερά1=σταθερά1+σταθερά2/σταθερά1*58
            Χρώμα ! μια_τιμή {
                  Για Μ=Πι/8 Έως 2*Πι Ανά Πι/8 {
                        Θέση 5000,5000
                        α=Πι/3+Μ+Λ
                        β=2*Λ+Μ
                        γ=Πι+Μ+Λ
                        Καμπύλη Γωνία α,500,β,-3000,γ,2000
                        Θέση σταθερά1,σταθερά2
                        Καμπύλη Γωνία Πι/16-α,100,Πι/16-β,-600,Πι/16-γ,400
                  }
            }
            Ανανέωση
            Χρώμα ! μια_τιμή {
                  Για Μ=Πι/8 Έως 2*Πι Ανά Πι/8 {
                        α=Πι/3+Μ+Λ
                        β=2*Λ+Μ
                        γ=Πι+Μ+Λ
                        Θέση 5000,5000
                        Καμπύλη Γωνία α,500,β,-3000,γ,2000
                        Θέση σταθερά1,σταθερά2
                        Καμπύλη Γωνία Πι/16-α,100,Πι/16-β,-600,Πι/16-γ,400
                  }
            }
      }
}








Το πρόγραμμα το είχα γράψει στα αγγλικά (η Μ2000 έχει διπλό σετ εντολών, αγγλικά και ελληνικά). Εδώ μάλιστα έχω χρησιμοποιήσει το FOR NEXT αντί για το FOR { } (το δεύτερο είναι πιο γρήγορο)

Put the code in module a (write Edit a then paste this code and press Esc, then write a press enter and the code run). 


SET FAST !
REFRESH 2000

CLS 1,0
GRADIENT 1,2 \\ from Blue to Green                          
PEN 13
DOUBLE
WIDTH 2 {PATH 4 {PRINT "Μ2000",,"FLOWERS"}}
NORMAL
PEN 15
FOR kkk=PI/10 TO PI STEP PI/2
      cc=RANDOM(2,15)
      qqq=1400
      qqq1=1100
      FOR K=PI/16 TO 2*PI+PI/16 STEP PI/32
            qqq1=qqq1+55
            qqq=qqq+qqq1/qqq*58
            PATH ! cc {
                  FOR Q=PI/8 TO 2*PI STEP PI/8
                        MOVE 5000,5000
                        a=PI/3+Q+k
                        b=2*k+Q
                        c=PI+Q+k
                        CURVE ANGLE a,500,b,-3000,c,2000
                        MOVE qqq,qqq1
                        CURVE ANGLE PI/16-a,100,PI/16-b,-600,PI/16-c,400
                  NEXT Q
            }
            REFRESH
            PATH ! cc {
                  FOR Q=PI/8 TO 2*PI STEP PI/8
                        a=PI/3+Q+k
                        b=2*k+Q
                        c=PI+Q+k
                        MOVE 5000,5000
                        CURVE ANGLE a,500,b,-3000,c,2000
                        MOVE qqq,qqq1
                        CURVE ANGLE PI/16-a,100,PI/16-b,-600,PI/16-c,400
                  NEXT Q
            }
      NEXT k
NEXT kkk



You can use another module, say b, to run this in endless, so write: Edit b then paste the code below, press Esc and write b and press enter to run the module b. Pressing key A (or a is the same), exit the loop. Statement loop restart the module (or a block) when reach the end of block/module. 

a
if keypress(65) then exit
loop


Μια μικρή εξήγηση:

 1) Για το PATH !  ή PATH χωρίς το θαυμαστικό. Η path ή χρώμα βάζει χρώμα φόντου. Αν όμως χρησιμοποιήσουμε το θαυμαστικό τότε αλλάζει τον τρόπο εκτύπωση σε XOR δηλαδή δυο φορές το ίδιο η εικόνα επανέρχεται όπως ήταν. επειδή αν πούμε ότι Α είναι το χρώμα της γραμμής και Β το χρώμα που πατάει στην οθόνη τότε το (Α Xor B ) Xor A δίνει πάλι Β. Αυτή τη τεχνική την χρησιμοποιούμε στο Rubber Band Drawing όπου μπορούμε να τραβάμε μια γραμμή (τη βλέπουμε στην οθόνη) αλλά το μέρος που πατάει δεν χαλάει, λόγω της διπλής αποτύπωσης. Το μυστικό της επιτυχίας λοιπόν είναι στην εντολή Ανανέωση (Refresh) όπου κάνουμε το Περιβάλλον της Μ2000 να δείξει τις αλλαγές της Οθόνης όταν γράφουμε την πρώτη φορά το σχέδιο. Μετά το γράφουμε άλλη μια φορά, άρα το αφαιρούμε, και μετά φτιάχνουμε το νέο, την άλλη θέση ή κατάσταση. Δηλαδή τη πρώτη φορά παίζει το Α Xor B και μετά το Α Xor B1 όπου το B1 είναι το Α Xor B...άρα παίρνουμε τελικά το B. Η Χρώμα ή Path (παίζει και η Color το ίδιο, αλλά εδώ έχω προτιμήσει το Path, μάλιστα αυτή η εντολή με ερωτηματικό μετά το μπλοκ αλλάζει συμπεριφορά γίνεται region, αλλά θα το δούμε άλλη φορά, μην το βάλετε το ερωτηματικό πριν μάθετε τι κάνει...) επενεργεί με το ! σε όλο το σχήμα, και το φόντο δηλαδή, όχι μόνο το περίγραμμα.

 2) Επιπλέον τα σχέδια τυπώνονται μόνο με την εντολή Καμπύλη Γωνία όπου δίνουμε γωνία (απόλυτη), και απόσταση (σχετική), δηλαδή χρησιμοποιούμε πολικές συντεταγμένες. (χωρίς το γωνία παίρνει τις κανονικές). Η Καμπύλη είναι τύπου  Bezier.

 3) Η επιγραφή έχει βγει με το Path, αφού μπορούμε και στα γράμματα να δώσουμε χρώμα φόντου (και αυτά είναι γραφικά εντέλει). Έτσι αν δώσουμε φόντο με την Path ή Χρώμα, το χρώμα της οθόνης αφήνουμε τα γράμματα με την γραμμή περιγράμματος. Μάλιστα μπορούμε να δώσουμε και πάχος γραμμής. Σημειώστε ότι τα σχέδια βγαίνουν αν θέλουμε και στον εκτυπωτή.

Γ.Κ.


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.