Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Για αλλη μια φορα θελω τη βοηθεια σας.

Εχουμε εναν πινακα ΝxΝ , οπου πχ Ν=400 , καθε ενα στοιχειο του πινακα ειναι ενα pixel μιας εικονας.

Και θελει ολα τα στοιχεια να ειναι ασπρα , (δηλαδη 64 μας δινει για την χρωματικη κλιμακα που θα χρησιμοποιησουμε ) εκτος απο τα στοιχεια που ειναι μερος του κυκλου αλλα και εσωτερικα (x-x0)2+(y-y0)2=r02

oπου xo yo και ro ειναι γνωστα, που θα ειναι μαυρα.

H συνθηκη θα ειναι : (x-x0)2+(y-y0)2<=r02

 

Δε θελει να χρησιμοποιησουμε δομες επαναληψης και ελεγχου ομως.

Εχω δημιουργησει τον πινακα με ολα τα ψηφια 64 , πως ομως θα ορισω τα x,y μες την συνθηκη της συναρτησης , για να μου βγαλει τα στοιχεια που ειναι μεσα στον κυκλο ??

Δημοσ.

Logical indexing είναι το ένα που θες και το άλλο μία από τις βασικότατες λειτουργίες του indexing του MATLAB. 

 

Δες εδώ.

 

Είναι τόσο απλό που εάν χρησιμοποιήσεις αυτά που έγραψα και ζητάς ακόμα βοήθεια, στην ουσία ζητάς να σου λύσουν την πολύ απλή άσκηση. 

Δημοσ.

Σε αυτο το λινκ που εβαλες εχει λογικες συνθηκες της πλακας. Εγω θελω να μαθω , πως θα γραψω τη λογικη συνθηκη της συγκεκριμενης συναρτησης.

(Υποψην μονος μου μαθαινω matlab και δεν εχω παρελθον με το αντικειμενο, οποτε κατι που ειναι πολυ απλο για σενα για μενα μπορει να μην ειναι)

 

Η απορια μου ειναι πως γινεται να γραψω την παραπανω συναρτηση , καθως για το προγραμμα οι μεταβλητες x,y ειναι αγνωστες. Θα ηθελα αν μπορεις να μου πεις αν γινεται ετσι οπως το σκεφτομαι

 

Και επειδη μου εχετε ξαναπει εδω μεσα οτι ειναι σαν να σας ζηταω τη λυση, μια βοηθεια χρειαζομαι , αμα τις ηθελα λυμμενες μπορω πολυ ευκολα να τις βρω, αλλα δεν ειναι αυτος ο σκοπος

 

a = zeros(N);
a = a.+64;
a((x-x0)^2+(y-y0)^2<=r^2) = 0;

 

Αυτο εχω γραψει , το οποιο δεν ειναι σωστο

Δημοσ.

N=400;

a=zeros(N);

 

Μερικά hints:

Tο κέντρο του κύκλου στο τετράγωνο πίνακα 400χ400 είναι 200,200;

Αλλιώς, ποιο είναι το index του κέντρου του πίνακα, άρα και κέντρο του κύκλου;  

[idx1,unused]=find(a(<100000);

Ο κύκλος θα διαγράφεται στις άκρες του πίνακα ή ενδιάμεσα; Θα δώσεις μήκος ακτίνας r = 100 ;

Η απόσταση από το κέντρο του κύκλου είναι: 

perimetros=sqrt((idxcenterx-r)^2+(idxcentery-r)^2) 

 (περίμετρος; σε τι μονάδα του πίνακα ) ;

Ας πάρουμε το ταβάνι αυτής 

tavani=ceil(perimetros);

Βρες όλα τα index του πίνακα a με απόσταση από το κέντρο >tavani; Εδώ μάλλον θα δυσκολευτείς λίγο.

Μετά:

ismember(Shmeiaektosperimetrou,a)=64;
~ismember(Shmeiaektosperimetrou,a)=κατράμι;
Δημοσ.

Ο κυκλος ειναι μικρος , σε τυχαιες θεσεις μεσα στο πλαισιο. Εγω απλα πρεπει να αναπτυξω ενα προγραμμα για οποιαδηποτε  x0,y0,r,N δωθουν ως παραμετροι

 

MΠορω να πω οτι με μπερδεψες αρκετα :P

Εγω νομιζα οτι απλα θα δημιουργησω εναν πινακα (οπως και εκανα) και θα βαλω μια λογικη συνθηκη για να αποκλεισω τα στοιχεια που ειναι εντος του κυκλου.

Δημοσ.

Σε αυτο το λινκ που εβαλες εχει λογικες συνθηκες της πλακας. Εγω θελω να μαθω , πως θα γραψω τη λογικη συνθηκη της συγκεκριμενης συναρτησης.

(Υποψην μονος μου μαθαινω matlab και δεν εχω παρελθον με το αντικειμενο, οποτε κατι που ειναι πολυ απλο για σενα για μενα μπορει να μην ειναι)

 

Η απορια μου ειναι πως γινεται να γραψω την παραπανω συναρτηση , καθως για το προγραμμα οι μεταβλητες x,y ειναι αγνωστες. Θα ηθελα αν μπορεις να μου πεις αν γινεται ετσι οπως το σκεφτομαι

 

Και επειδη μου εχετε ξαναπει εδω μεσα οτι ειναι σαν να σας ζηταω τη λυση, μια βοηθεια χρειαζομαι , αμα τις ηθελα λυμμενες μπορω πολυ ευκολα να τις βρω, αλλα δεν ειναι αυτος ο σκοπος

 

a = zeros(N);

a = a.+64;

a((x-x0)^2+(y-y0)^2<=r^2) = 0;

 

Αυτο εχω γραψει , το οποιο δεν ειναι σωστο

 

 

Αδερφέ, έχω μία ερώτηση. 

 

Πώς γίνεται να μαθαίνεις μόνος σου MATLAB και να λες:

 

 

Και θελει ολα τα στοιχεια να ειναι ασπρα , (δηλαδη 64 μας δινει για την χρωματικη κλιμακα που θα χρησιμοποιησουμε ) εκτος απο τα στοιχεια που 

H συνθηκη θα ειναι : (x-x0)2+(y-y0)2<=r02

 

Δε θελει να χρησιμοποιησουμε δομες επαναληψης και ελεγχου ομως.

 

Ποιος βάζει τους περιορισμούς και ποιος δίνει τα δεδομένα; 

 

 

Άρα, δεν ασχολείσαι μόνος σου αλλά κάνεις ένα μάθημα στο οποίο σας κάνουν MATLAB. Άρα, ο καθηγητής θα σας έχει δώσει σημειώσεις. 

 

Δημοσ.

Τώρα που το ξαναβλέπω έχει μερικά λογικά άλματα στο τέλος αυτό που παρέθεσα, αλλά άμα το φτάσεις εκεί θα τα βρεις.

Hints πως θα το έκανα από μυαλού έδωσα με την ελπίδα να σε βοηθήσουν κάπως. Αν όχι λυπάμαι απέτυχα το στόχο μου.

Δημοσ.

@Timonkaipumba Μαθημα της σχολης ειναι , απλα οσοι ειναι μεγαλυτερα ετη δεν τους δεχεται στα εργαστηρια λογω περιορισμενων θεσεων , οποτε αυτος παραδιδει τα θεματα, και λιγο απο το βιβλιο , λιγο απο google λιγο απο Insomnia τα παλευω. Αυτο εννοω μονος , οτι δεν μου δειχνει κανενας.

 

@melodystyle2003 Τα hints που μου εδωσες απλα δε καταλαβα τι συμβολιζουν πολλα αυτα , οπως πχ αυτο idxcenterx ,σκεψου οτι μεχρι την προηγουμενη εργασια ειχαμε να κανουμε με την if, for , while για να σου δωσω να καταλαβεις το επιπεδο.

 

Και επειδη δεν εχω επαφη με το αντικειμενο και δε ξερω πολλα , ρωτησα αν ο τροπος που το σκεφτηκα εγω ειναι επιλυσιμος..

Δημοσ.

Ωραία λοιπόν:

Πρέπει να βρεις το κέντρο του κύκλου. Απο εκεί με την εκάστωτε ακτίνα υπολογίζεις σε τι απόσταση θα βρίσκεται η περίμετρος του κύκλου. Πρέπει να βρεις ποια στοιχεία του πίνακα είναι εντός ή εκτός της περιμέτρου και να βαφτίζεις άσπρα ή μαύρα.

Χωρίς δομές ελέγχου if και επανάληψης for (πιο χρονοβόρες επίσης), καθώς και εκτός cells που είναι πιο advanced, με τη χρήση της ismember (ή της find στο ακόλουθο υποπαράδειγμα) αναλόγως των index (=ακριβώς ποιο στοιχείο του πίνακα και όχι τι τμή έχει) αλλάζεις  χρώμα. To index θα σου προσδιορίζει τη θέση των στοιχείων στον πίνακα άρα τα x0, y0.

Ν=400;
a = zeros(N); %400*400 predefined matrix profanws gia logous taxythtas
a = 64; % ola ta stoixeia toy matrix isa me 64
a((x-x0)^2+(y-y0)^2<=r^2) = 0; % de tha trexei etsi 
distance=sqrt((x-x0)^2+(y-y0)^2); % prwta briskeis apostash
megalyterh=find(distance>r); % bres shmeia (posa einai oxi index!) exw apo thn aktina r, alla thelei douleia den tha texei akribws etsi, dhl edw de stekei h xrhsh ths find skepsou ti tha prepei na oriseis sth find gia na breis ta ektos perimetrou stoixeia alla kai to index tous sto pinaka; (etsi tha to matheis kalutera)
megalyterh=0; %allaxe to xrwma
Δημοσ.

Το length() δε μπορει να χρησιμοποιηθει εδω ετσι ? Μονο σε γραμμες ή στηλες μπορει να χρησιμοποιηθει ?


Τον τροπο σου παλι δεν τον επιασα, αφου τα x , y δε τα δεχεται , αφου δεν εχουν οριστει ..

 

Γινεται να ορισω καπως το πεδιο ορισμου των x,y ,δηλαδη (1 , N) κατι τετοιο τελος παντων ?

Δε ξερω γιατι με εχει σκαλωσει ετσι αυτη η ασκηση ...

Δημοσ.

x,y είναι το κέντρο του κύκλου, περιέγραψα πιο πάνω πως μπορείς να τα βρεις,

x0, y0 είναι κάθε σημείο της περιμέτρου. Η ακτίνα r που θα ορίσεις με πρόσθεση στο κέντρο του κύκλου θα δου δώσει ένα σημείο της περιμέτρου, δηλ π.χ. έστω στο πίνακα 400x400 το κέντρο είναι το 200,200. Με ακτίνα r = 100; το ένα σημείο της περιμέτρου είναι το 200,100, σωστά; Ή το 300,200 , 100,200 , 200,300 (προσοχή θες τα index αυτών) ; Σε ποια a(index) στοιχεία ανήκουν αυτά τα σημεία; Πως θα βρεις τα υπόλοιπα σημεία της περιμέτρου άρα τα υπόλοιπα index του a πίνακα ώστε να έχεις όλα τα σημεία που απαρτίζουν τη περίμετρο; Αφού το βρεις αυτό εντός της περιμέτρου όλα ta στοιχεία ~64;.

64 64 64 64 64 64 64 64 64

64 64 64 64 64 64 64 64 64

64 64 64 64 64 64 64 64 64

64 64 64 64 64 64 64 64 64

64 64 64 64 64 64 64 64 64

64 64 64 64 64 64 64 64 64

64 64 64 64 64 64 64 64 64

64 64 64 64 64 64 64 64 64

64 64 64 64 64 64 64 64 64

 

το bold είναι το κέντρο με index=41; r=3; Στο περίπου κάπως έτσι θα σου βγει:

 

64 64 64 64 64 64 64 64 64

64 64 64 64 00 64 64 64 64

64 64 64 00 00 00 64 64 64

64 64 00 00 00 00 00 64 64

64 00 00 00 00 00 00 00 64

64 64 00 00 00 00 00 64 64

64 64 64 00 00 00 64 64 64

64 64 64 64 00 64 64 64 64

64 64 64 64 64 64 64 64 64

Δημοσ.

Καταρχας ευχαριστω πολυ για τον κοπο σου να μου μαθεις 2-3 πραγματα και την υπομονη σου..

 

Επομενος θελω μια λογικη συναρτηση που μεσα της θα αποθηκευσω ολα τα σημεια που εχουν <= αποσταση απο το κεντρο του κυκλου ?

a(a(x0,y0)+r) = 0; %αυτο μου μαυριζει την περιμετρο του κυκλου ?

Δημοσ.

a(a(x0,y0)+r) = 0; %αυτο μου μαυριζει την περιμετρο του κυκλου ? 

 

Όχι. Σπάσε σε πιο μικρά βήματα το τι θέλεις να κάνεις και αποτύπωσέ το σε κώδικα. Η μηχανή είναι ο πιο βλάκας που μπορείς να συναντήσεις. Τα θέλει όλα από το Α έως το Ω με πλήρη λεπτομέρεια αλλά είναι πιστός ακόλουθος και ότι της πεις το κάνει με ακρίβεια.

Δημοσ.

Εχω καταμπερδευτει , επειδη οσα βλεπω και διαβαζω για λογικες συνθηκες κτλ εχουν να κανουν με την τιμη του καθε στοιχειου , σε μας ειναι ολα 64 , εμεις πρεπει να "παιξουμε" με τις συντεταγμενες, και γιαυτο το χανω....

 

Επισης καπου ειδα τωρα , εβαλε σημειωση οτι μπορουμε να χρησιμοποιησουμε την εντολη meshgrid , την οποια ειδα στο help και δε ξερω κατα ποσο μπορει να με βοηθησει.

Δημοσ.

Χρησιμοποίησε τη meshgrid ως εξής:

N=400;
x1 = 0:N;
y1 = 0:N;
[xx yy] = meshgrid(x1,y1);
Points= [xx(:) yy(:)];
Έτσι έχεις τα x,y.

Νομίζω πως πρέπει να αφιερώσεις αρκετό χρόνο σε μικρά παραδείγματα ώστε να μπορέσεις να βρεις τη λύση που ψάχνεις.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...