Πώς να δημιουργήσετε n διαφορετικά χρώματα για κάθε φυσικό αριθμό n;

ψήφοι
35

Ας υποθέσουμε ότι n = 100? Πώς μπορώ να δημιουργήσει 100 οπτικά διαφορετικά χρώματα; Είναι αυτό μαθηματικά δυνατόν;

Δημοσιεύθηκε 24/02/2010 στις 19:09
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
4

Θέλετε να μετατρέψετε σε HSL και στη συνέχεια να επαναλάβει μέσα από τις αξίες της απόχρωσης (Η) διατηρώντας παράλληλα τα άλλα 2 τιμές σταθερές.

Για κάθε τιμή που μετατρέψετε από HSL πίσω σε RGB .

Δείτε τις απαντήσεις μου εδώ και εδώ .

Αν Ν σας είναι πολύ μεγάλη και ως εκ τούτου τα χρώματα δεν είναι οπτικά διακριτές θα μπορούσε σε εκείνο το σημείο επαναλάβει πάνω από όλα τα ίδια χρώματα και να αλλάξετε τα άλλα συστατικά για να ποικίλει τον κορεσμό ή φωτεινότητα. Έτσι, βασικά θα μπορούσατε να έχετε ένα μέγιστο αριθμό τιμών απόχρωση να χρησιμοποιήσετε, και μια φορά που χτύπησε μπορείτε να ξεκινήσετε από την αρχή με ένα διαφορετικό κορεσμό ή φωτεινότητα.

Απαντήθηκε 24/02/2010 στις 19:11
πηγή χρήστη

ψήφοι
4

100 είναι πολλά χρώματα, αλλά ίσως να είναι σε θέση να το κάνει με τη διανομή τους ως αραιά το δυνατόν περισσότερο στην HSB ή χώρο HSL? να κάνει αυτό το RGB είναι μάλλον δύσκολο.

Για παράδειγμα, μπορείτε να αποφασίσετε να χρησιμοποιήσετε 10 διαφορετικές αποχρώσεις, 4 διαφορετικά επίπεδα κορεσμού, και 3 διαφορετικές ρυθμίσεις φωτεινότητας, ότι θα δώσει μέχρι και 120 χρώματα. Θα πρέπει να επιλέξετε τις τιμές κορεσμού και φωτεινότητας με προσοχή? ανθρώπινα μάτια είναι περίπλοκη και σύγχυση αισθητήρες. Εάν θεωρήσουν ότι το χρωματικό χώρο σαν κώνος, μάλλον θα θέλετε διαφορετικό αριθμό αποχρώσεων σε κάθε επίπεδο φωτεινότητας / κορεσμού.

Εδώ είναι μια σύνδεση με την wikipedia είσοδο στην HSB .

Απαντήθηκε 24/02/2010 στις 19:11
πηγή χρήστη

ψήφοι
33

Επεξεργασία:

Δεν έχω καμία εμπειρία σε αυτόν τον τομέα και τις ικανότητές μαθηματικά μου είναι αρκετά μέσο όρο. Αλλά έχω την άποψη ότι η λύση σε αυτό το πρόβλημα είναι πιο πολύπλοκο και ενδιαφέρον από πολλές απαντήσεις προτείνω εδώ, από τότε που προσπάθησα να κάνω κάτι παρόμοιο πρόσφατα και δεν βρούμε μια λύση.

Διαφορά χρώματος

Η αντίληψη του χρώματος είναι φυσικά υποκειμενική, αλλά υπάρχει σημαντική συμφωνία μεταξύ των ανθρώπων. Για παράδειγμα, μπορούμε όλοι να συμφωνήσουμε ότι το κόκκινο, το πράσινο και το μπλε είναι πολύ διαφορετικά χρώματα, ακόμα και αχρωματοψία άνθρωποι συμφωνούν ότι το μαύρο και το λευκό είναι πολύ διαφορετικά.

RGB

Η πιο κοινή αναπαράσταση του χρώματος σε συστήματα ηλεκτρονικών υπολογιστών είναι το διάνυσμα (R, G, β) το οποίο προτείνει μια απλή συνάρτηση απόστασης, όπως

RGB διαφορά χρώματος

Αφήνει ρυθμίσετε το εύρος για r , g και b να [0, 1], και να δούμε πώς λειτουργεί αυτό:

  1. Κόκκινο (1, 0, 0) και κόκκινο (1, 0, 0) έχει την απόσταση των 0 , η οποία πρέπει να είναι προφανές
  2. Κόκκινο (1, 0, 0) και κίτρινο (1, 1, 0) έχει την απόσταση της 1 , η οποία είναι μικρότερη από την απόσταση του
  3. Κόκκινο (1, 0, 0) και το μπλε (0, 0, 1) η οποία είναι sqrt (2) , η οποία είναι εύλογη

Μέχρι εδώ καλά. Το πρόβλημα όμως είναι ότι το μπλε και το κόκκινο έχουν την ίδια απόσταση 1 από μαύρο (0, 0, 0) , αλλά όταν πρόκειται για την εικόνα αυτή δεν φαίνεται να ισχύει και:

μπλε και κόκκινο σε μαύρο

Επίσης κίτρινο (1, 1, 0) και ματζέντα (1, 0, 1) και οι δύο έχουν την ίδια απόσταση 1 από λευκό (1, 1, 1) , η οποία δεν φαίνεται να έχει νόημα, είτε:

κίτρινο και πορφυρό σε λευκό

HSL και HSV

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

CIEDE2000

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

CIEDE2000

(η πλήρης τύπος που περιγράφεται στο άρθρο αυτό είναι τεράστια )

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

Η επιλογή Αλγόριθμος χρώμα

naive λύση

Μερικές απαντήσεις πρότεινε τον ακόλουθο αλγόριθμο

colors = []
for n in range(n):
    success=False
    while not success:
        new_color = random_color()
        for color in colors:
            if distance(color, new_color)>far_enough:
                colors.append(new_color)
                success = True
                break

Ο αλγόριθμος αυτός έχει κάποια προβλήματα:

  1. Η απόσταση των χρωμάτων δεν είναι η βέλτιστη. Αν φανταστούμε τα χρώματα να είναι σαν τους αριθμούς σε μια γραμμή, τρεις αριθμοί θα βέλτιστη απόσταση μεταξύ τους, όπως αυτό:

    | Α ----- β ----- γ |

    Συσκευασία επιπλέον έναν αριθμό εκεί χωρίς να κινείται a, b και c είναι σαφώς χειρότερη από τον νέο προσανατολισμό όλα τα χρώματα.

  2. Ο αλγόριθμος δεν είναι εγγυημένη για να τερματίσει . Τι θα συμβεί αν δεν υπάρχει χρώμα που είναι αρκετά αποτελούν τα υπάρχοντα χρώματα στη λίστα; Ο βρόχος θα συνεχίσει για πάντα

Η σωστή λύση

Λοιπόν .. δεν έχω μία.

Απαντήθηκε 24/02/2010 στις 19:17
πηγή χρήστη

ψήφοι
2

Δεν είναι μια απάντηση στην ερώτησή σας, αλλά, αν n έχει μια μέγιστη τιμή και η εφαρμογή σας το επιτρέπει, μπορείτε να χρησιμοποιήσετε μια προκαθορισμένη λίστα των χρωμάτων όπως αυτό:

http://en.wikipedia.org/wiki/List_of_colors

Ένα πλεονέκτημα είναι ότι θα μπορούσε να δείξει ένα ανθρωπίνως αναγνώσιμο όνομα του χρώματος σε ένα tooltip για τα άτομα με αχρωματοψία.

Απαντήθηκε 24/02/2010 στις 19:31
πηγή χρήστη

ψήφοι
1

Για ορεκτικά, μην χρησιμοποιείτε χώρο RGB? είναι δύσκολο να βρείτε ένα χειρότερο χρωματικό χώρο για αυτό το πρόβλημα. (Ανάλογα με το αν χρησιμοποιείτε τα χρώματα για την εμφάνιση ή για εκτύπωση θα πρέπει είτε τεράστιους αριθμούς των δυσδιάκριτες χρώματα κοντά στο μαύρο ή σχεδόν λευκό).

Εάν χρησιμοποιείτε το Lab χώρο, υπάρχουν αντιληπτική μοντέλα χρώματος (CIE 1996; και CIE 2000) για τη μέτρηση της οπτικής εγγύτητα των χρωμάτων (για εκτύπωση και εμφάνιση, αντίστοιχα).

Δεν χρειάζεται να πω αν θα πάμε να υπολογίσουμε τα χρώματα φορά και να αποθηκεύσετε το αποτέλεσμα, ή αν πρέπει να υπολογισθεί εκ νέου on the fly (και σε αυτή την περίπτωση θα πρέπει να είναι ντετερμινιστικό ή όχι). Προφανώς, κάθε συζήτηση για τον καλύτερο τρόπο για να δημιουργήσει το σύνολο θα εξαρτάται από αυτή.

Αν και θα ήθελα να προτείνω ομοιόμορφα διαίρεση των αξόνων του χρωματικού χώρου (δηλαδή σε 8) και τη χρήση αυτών ως αρχική σημεία θα είναι πολύ πιο αποτελεσματικό από οποιαδήποτε τυχαία διαδικασία. Σίγουρα το μόνο που χρειάζεται για να συγκρίνει κάθε σημείο με τους γείτονές της (και μόνο αν είναι ήδη στο σύνολο), η οποία θα σας σώσει ένα τεράστιο αριθμό των συγκρίσεων.

Απαντήθηκε 24/02/2010 στις 20:19
πηγή χρήστη

ψήφοι
34

Ναι. Καθορισμός ξεχωριστή είναι ένα προϊόν της αναβολής σε ένα χρωματικό χώρο, στη συνέχεια, όταν λέμε μέγιστη διαφορετικά χρώματα αυτό που θέλω να πω είναι τα χρώματα που είναι τόσο μακριά από όλα τα άλλα χρώματα όσο το δυνατόν. Αλλά δεδομένου ότι ο χώρος χρώμα δεν αλλάζει την απάντηση δεν πρόκειται να αλλάξει. Και την εφαρμογή κάτι που ταιριάζει καλύτερα με τα ανθρώπινα μάτια και πώς τα ανθρώπινα μάτια βλέπουν το χρώμα σαν CIE-εργαστήριο απόσταση χρώμα de2000 κάνει ξανακάνει όλους τους υπολογισμούς σκληρά, αλλά κάνει μια στατική λίστα εύκολη. Εδώ είναι 128 συμμετοχές.

private static final String[] indexcolors = new String[]{
        "#000000", "#FFFF00", "#1CE6FF", "#FF34FF", "#FF4A46", "#008941", "#006FA6", "#A30059",
        "#FFDBE5", "#7A4900", "#0000A6", "#63FFAC", "#B79762", "#004D43", "#8FB0FF", "#997D87",
        "#5A0007", "#809693", "#FEFFE6", "#1B4400", "#4FC601", "#3B5DFF", "#4A3B53", "#FF2F80",
        "#61615A", "#BA0900", "#6B7900", "#00C2A0", "#FFAA92", "#FF90C9", "#B903AA", "#D16100",
        "#DDEFFF", "#000035", "#7B4F4B", "#A1C299", "#300018", "#0AA6D8", "#013349", "#00846F",
        "#372101", "#FFB500", "#C2FFED", "#A079BF", "#CC0744", "#C0B9B2", "#C2FF99", "#001E09",
        "#00489C", "#6F0062", "#0CBD66", "#EEC3FF", "#456D75", "#B77B68", "#7A87A1", "#788D66",
        "#885578", "#FAD09F", "#FF8A9A", "#D157A0", "#BEC459", "#456648", "#0086ED", "#886F4C",

        "#34362D", "#B4A8BD", "#00A6AA", "#452C2C", "#636375", "#A3C8C9", "#FF913F", "#938A81",
        "#575329", "#00FECF", "#B05B6F", "#8CD0FF", "#3B9700", "#04F757", "#C8A1A1", "#1E6E00",
        "#7900D7", "#A77500", "#6367A9", "#A05837", "#6B002C", "#772600", "#D790FF", "#9B9700",
        "#549E79", "#FFF69F", "#201625", "#72418F", "#BC23FF", "#99ADC0", "#3A2465", "#922329",
        "#5B4534", "#FDE8DC", "#404E55", "#0089A3", "#CB7E98", "#A4E804", "#324E72", "#6A3A4C",
        "#83AB58", "#001C1E", "#D1F7CE", "#004B28", "#C8D0F6", "#A3A489", "#806C66", "#222800",
        "#BF5650", "#E83000", "#66796D", "#DA007C", "#FF1A59", "#8ADBB4", "#1E0200", "#5B4E51",
        "#C895C5", "#320033", "#FF6832", "#66E1D3", "#CFCDAC", "#D0AC94", "#7ED379", "#012C58"
};

Εδώ είναι το πρώτο 256 ως εικόνα.

μέγιστη απόσταση

(Αριστερά-προς-δεξιά) (κορυφή προς τα κάτω). Ίσως να είναι σε θέση να πάρει μερικές ακόμα διαφορετικά χρώματα, αν φρόντισε κάθε χρώμα ήταν ίση απόσταση όσο το δυνατόν εντός της χρωματικό. Ο πίνακας αναζήτησης παίρνει κάθε πρόσθετο χρώμα με μέγιστη διαφορετική από όλες τις προηγούμενες χρώματα αντί για τον ορισμό του Ν στην αρχή και στη συνέχεια τη χαρτογράφηση το χρωματικό. Οπότε ναι, ωμής βίας και ένας αλγόριθμος χρώμα dsitance υψηλό επίπεδο και να είστε έτοιμοι να κάνετε το ίδιο σύνολο χρωμάτων εαυτό σας. Κατά τη διάρκεια της ημέρας ή έτσι.

Απαντήθηκε 30/11/2013 στις 09:18
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more