kostask91 Δημοσ. 19 Νοεμβρίου 2013 Δημοσ. 19 Νοεμβρίου 2013 Για αλλη μια φορα θελω τη βοηθεια σας. Εχουμε εναν πινακα Ν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 μες την συνθηκη της συναρτησης , για να μου βγαλει τα στοιχεια που ειναι μεσα στον κυκλο ??
Timonkaipumpa Δημοσ. 19 Νοεμβρίου 2013 Δημοσ. 19 Νοεμβρίου 2013 Logical indexing είναι το ένα που θες και το άλλο μία από τις βασικότατες λειτουργίες του indexing του MATLAB. Δες εδώ. Είναι τόσο απλό που εάν χρησιμοποιήσεις αυτά που έγραψα και ζητάς ακόμα βοήθεια, στην ουσία ζητάς να σου λύσουν την πολύ απλή άσκηση.
kostask91 Δημοσ. 19 Νοεμβρίου 2013 Μέλος Δημοσ. 19 Νοεμβρίου 2013 Σε αυτο το λινκ που εβαλες εχει λογικες συνθηκες της πλακας. Εγω θελω να μαθω , πως θα γραψω τη λογικη συνθηκη της συγκεκριμενης συναρτησης. (Υποψην μονος μου μαθαινω matlab και δεν εχω παρελθον με το αντικειμενο, οποτε κατι που ειναι πολυ απλο για σενα για μενα μπορει να μην ειναι) Η απορια μου ειναι πως γινεται να γραψω την παραπανω συναρτηση , καθως για το προγραμμα οι μεταβλητες x,y ειναι αγνωστες. Θα ηθελα αν μπορεις να μου πεις αν γινεται ετσι οπως το σκεφτομαι Και επειδη μου εχετε ξαναπει εδω μεσα οτι ειναι σαν να σας ζηταω τη λυση, μια βοηθεια χρειαζομαι , αμα τις ηθελα λυμμενες μπορω πολυ ευκολα να τις βρω, αλλα δεν ειναι αυτος ο σκοπος a = zeros(N);a = a.+64;a((x-x0)^2+(y-y0)^2<=r^2) = 0; Αυτο εχω γραψει , το οποιο δεν ειναι σωστο
melodystyle2003 Δημοσ. 19 Νοεμβρίου 2013 Δημοσ. 19 Νοεμβρίου 2013 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)=κατράμι;
kostask91 Δημοσ. 19 Νοεμβρίου 2013 Μέλος Δημοσ. 19 Νοεμβρίου 2013 Ο κυκλος ειναι μικρος , σε τυχαιες θεσεις μεσα στο πλαισιο. Εγω απλα πρεπει να αναπτυξω ενα προγραμμα για οποιαδηποτε x0,y0,r,N δωθουν ως παραμετροι MΠορω να πω οτι με μπερδεψες αρκετα Εγω νομιζα οτι απλα θα δημιουργησω εναν πινακα (οπως και εκανα) και θα βαλω μια λογικη συνθηκη για να αποκλεισω τα στοιχεια που ειναι εντος του κυκλου.
Timonkaipumpa Δημοσ. 20 Νοεμβρίου 2013 Δημοσ. 20 Νοεμβρίου 2013 Σε αυτο το λινκ που εβαλες εχει λογικες συνθηκες της πλακας. Εγω θελω να μαθω , πως θα γραψω τη λογικη συνθηκη της συγκεκριμενης συναρτησης. (Υποψην μονος μου μαθαινω 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. Άρα, ο καθηγητής θα σας έχει δώσει σημειώσεις.
melodystyle2003 Δημοσ. 20 Νοεμβρίου 2013 Δημοσ. 20 Νοεμβρίου 2013 Τώρα που το ξαναβλέπω έχει μερικά λογικά άλματα στο τέλος αυτό που παρέθεσα, αλλά άμα το φτάσεις εκεί θα τα βρεις. Hints πως θα το έκανα από μυαλού έδωσα με την ελπίδα να σε βοηθήσουν κάπως. Αν όχι λυπάμαι απέτυχα το στόχο μου.
kostask91 Δημοσ. 20 Νοεμβρίου 2013 Μέλος Δημοσ. 20 Νοεμβρίου 2013 @Timonkaipumba Μαθημα της σχολης ειναι , απλα οσοι ειναι μεγαλυτερα ετη δεν τους δεχεται στα εργαστηρια λογω περιορισμενων θεσεων , οποτε αυτος παραδιδει τα θεματα, και λιγο απο το βιβλιο , λιγο απο google λιγο απο Insomnia τα παλευω. Αυτο εννοω μονος , οτι δεν μου δειχνει κανενας. @melodystyle2003 Τα hints που μου εδωσες απλα δε καταλαβα τι συμβολιζουν πολλα αυτα , οπως πχ αυτο idxcenterx ,σκεψου οτι μεχρι την προηγουμενη εργασια ειχαμε να κανουμε με την if, for , while για να σου δωσω να καταλαβεις το επιπεδο. Και επειδη δεν εχω επαφη με το αντικειμενο και δε ξερω πολλα , ρωτησα αν ο τροπος που το σκεφτηκα εγω ειναι επιλυσιμος..
melodystyle2003 Δημοσ. 20 Νοεμβρίου 2013 Δημοσ. 20 Νοεμβρίου 2013 Ωραία λοιπόν: Πρέπει να βρεις το κέντρο του κύκλου. Απο εκεί με την εκάστωτε ακτίνα υπολογίζεις σε τι απόσταση θα βρίσκεται η περίμετρος του κύκλου. Πρέπει να βρεις ποια στοιχεία του πίνακα είναι εντός ή εκτός της περιμέτρου και να βαφτίζεις άσπρα ή μαύρα. Χωρίς δομές ελέγχου 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
kostask91 Δημοσ. 20 Νοεμβρίου 2013 Μέλος Δημοσ. 20 Νοεμβρίου 2013 Το length() δε μπορει να χρησιμοποιηθει εδω ετσι ? Μονο σε γραμμες ή στηλες μπορει να χρησιμοποιηθει ? Τον τροπο σου παλι δεν τον επιασα, αφου τα x , y δε τα δεχεται , αφου δεν εχουν οριστει .. Γινεται να ορισω καπως το πεδιο ορισμου των x,y ,δηλαδη (1 , N) κατι τετοιο τελος παντων ? Δε ξερω γιατι με εχει σκαλωσει ετσι αυτη η ασκηση ...
melodystyle2003 Δημοσ. 20 Νοεμβρίου 2013 Δημοσ. 20 Νοεμβρίου 2013 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
kostask91 Δημοσ. 20 Νοεμβρίου 2013 Μέλος Δημοσ. 20 Νοεμβρίου 2013 Καταρχας ευχαριστω πολυ για τον κοπο σου να μου μαθεις 2-3 πραγματα και την υπομονη σου.. Επομενος θελω μια λογικη συναρτηση που μεσα της θα αποθηκευσω ολα τα σημεια που εχουν <= αποσταση απο το κεντρο του κυκλου ? a(a(x0,y0)+r) = 0; %αυτο μου μαυριζει την περιμετρο του κυκλου ?
melodystyle2003 Δημοσ. 20 Νοεμβρίου 2013 Δημοσ. 20 Νοεμβρίου 2013 a(a(x0,y0)+r) = 0; %αυτο μου μαυριζει την περιμετρο του κυκλου ? Όχι. Σπάσε σε πιο μικρά βήματα το τι θέλεις να κάνεις και αποτύπωσέ το σε κώδικα. Η μηχανή είναι ο πιο βλάκας που μπορείς να συναντήσεις. Τα θέλει όλα από το Α έως το Ω με πλήρη λεπτομέρεια αλλά είναι πιστός ακόλουθος και ότι της πεις το κάνει με ακρίβεια.
kostask91 Δημοσ. 20 Νοεμβρίου 2013 Μέλος Δημοσ. 20 Νοεμβρίου 2013 Εχω καταμπερδευτει , επειδη οσα βλεπω και διαβαζω για λογικες συνθηκες κτλ εχουν να κανουν με την τιμη του καθε στοιχειου , σε μας ειναι ολα 64 , εμεις πρεπει να "παιξουμε" με τις συντεταγμενες, και γιαυτο το χανω.... Επισης καπου ειδα τωρα , εβαλε σημειωση οτι μπορουμε να χρησιμοποιησουμε την εντολη meshgrid , την οποια ειδα στο help και δε ξερω κατα ποσο μπορει να με βοηθησει.
melodystyle2003 Δημοσ. 20 Νοεμβρίου 2013 Δημοσ. 20 Νοεμβρίου 2013 Χρησιμοποίησε τη meshgrid ως εξής: N=400; x1 = 0:N; y1 = 0:N; [xx yy] = meshgrid(x1,y1); Points= [xx( yy(]; Έτσι έχεις τα x,y. Νομίζω πως πρέπει να αφιερώσεις αρκετό χρόνο σε μικρά παραδείγματα ώστε να μπορέσεις να βρεις τη λύση που ψάχνεις.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα