zaxoys Δημοσ. 20 Μαρτίου 2006 Δημοσ. 20 Μαρτίου 2006 Το πρόβλημα είναι το εξής: (είναι σαν CA αν έχει ασχοληθεί κανείς) Έστω ένας πίνακας 50Χ50 (στην ουσία είναι ένα grid ) οπού το πάνω μέρος πχ 30Χ50 είναι 0 Α1=(zeros(30,50) και ο υπόλοιπος έχει κάποιες τιμές (έστω πχ Α2=rand(20,50).Οπότε Α=[A1;A2] Αυτό που θέλω είναι όταν το μέρος του πίνακα που έχει τιμές έχει πχ τιμή >0.5 σε κάποιο σημείο,η διαφορά αυτή (ΤΙΜΗ-0.5) να μεταφέρεται 1.σε κάποιο γειτονικό σημείο από τα 8 αν κάποιο από αυτά έχει τιμή 0 ή αλλιώς 2) σε κάποιο άλλο γειτονικό που έχει κάποια άλλη τιμή οπότε αν έχει τιμη >0.5 πάλι μεταφέρεται κλπ Το πρόβλημα που αντιμετωπίζω είναι οτι προφανώς πχ στο #1 μπορεί να υπάρχουν 3 πιθανά σημεία (0) γύρω από αυτό που έχω και εγώ θέλω να μεταφερθεί τυχαία (ισοπίθανα δλδ σε οποιαδήποτε σημείο ) η τιμή σε κάποιο από αυτά ,έχει κανείς κάποια ιδεά πως μπορεί να γίνει αυτό? επίσης μήπως ξέρει κανείς πως μπορώ να απεικονίσω αυτόν τον πίνακα σαν εικόνα?Μια απόπειρα που έκανα με την imhshow μου την βγάζει πολύ μικρή αφού θεωρεί το κάθε σημείο του grid σαν pixel
Axelfc Δημοσ. 20 Μαρτίου 2006 Δημοσ. 20 Μαρτίου 2006 Για το πρωτο προβλημα που αναφερεις μια λυση ειναι να περνας τον αριθμο των μηδενικων στοιχειων γυρω απο το ζητουμενο σε μια temp μεταβλητη και στη συνεχεια να χρησιμοποιεις την εντολη randint για να παρεις τυχαια ενα απο τα σημεια και να τοποθετησεις εκει την τιμη που θες. Εστω δλδ οπως λες οτι για το στοιχειο #1 εχεις τρια μηδενικα. Βαζεις σε μια μεταβλητη tmp = 3. Μετα διαλεγεις τυχαια με κανονικη κατανομη ενα απο τα στοιχεια αυτα ως εξης pos = randint(1,1,[1,3]). Και στη θεση που θα προκυψει βαζεις την τιμη της μεταβλητης. Οσο για το imshow ετσι λειτουργει. Το καθε στοιχειο του array γινεται ενα pixel. Για να δεις μια εικονα δουλευει καλυτερα το imshow(uint8(my_image)) Αν δεν καταλαβες τι εννοω παραπανω πες μου να στο εξηγησω καλυτερα. Εχω την εντυπωση οτι δουλευει.
zaxoys Δημοσ. 20 Μαρτίου 2006 Μέλος Δημοσ. 20 Μαρτίου 2006 Οκ ευχαριστώ, θα το δοκιμάσω και βλέπουμε ...
Axelfc Δημοσ. 20 Μαρτίου 2006 Δημοσ. 20 Μαρτίου 2006 Το προβλημα που βλεπω να δημιουργειται ειναι να βρεις εναν τροπο να ξεπερασεις το προβλημα με τις οριακες συνθηκες. Δλδ ο αριθμος των γειτονικων στοιχειων διαφοροποιειται αναλογα με τη θεση του στοιχειου που εξεταζεις, απο 3 εως 8 στοιχεια.
Axelfc Δημοσ. 20 Μαρτίου 2006 Δημοσ. 20 Μαρτίου 2006 Ριξε μια ματια σε αυτο. Δουλευει μονο για το στοιχειο (1,1). Με καταλληλες τροποποιησεις μπορεις να το κανεις και για τα υπολοιπα στοιχεια. Δεν μπορω να σκεφτω κατι διαφορετικο απο το να πρεπει να παρεις 8 διαφορετικες περιπτωσεις αναλογα με το ποιο ειναι το στοιχειο που θες να εξετασεις. Για καποιο λογο που δεν καταλαβαινω τωρα δεν δουλευει με το if i ~= 2 && j ~= 2. Αυτο το εβαλα για να μην μετραει ως μηδενικο το προς εξεταση στοιχειο σε περιπτωση που αυτο ισουται με 0. > clear all clc a = [1 0;0 0] b = [NaN NaN NaN;NaN NaN NaN;NaN NaN NaN] if size(a,1) == 2 && size(a,2) == 2 b(2:3,2:3) = a; cnt = 0; for i = 1:size(b,1) for j = 1:size(b,2) % if i ~= 2 && j ~= 2 if b(i,j) == 0 cnt = cnt + 1; end % end end end cnt pos = randint(1,1,[1,cnt]) cnt2 = 0; for i = 1:size(b,1) for j = 1:size(b,2) % if i ~= 2 && j ~= 2 if b(i,j) == 0 cnt2 = cnt2 + 1; if cnt2 == pos ipos = i; jpos = j; break end end % end end end cnt2 b(ipos,jpos) = b(2,2); b a = b(2:3,2:3); a end
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.