Display Programmieraufgabe



  • Schon mal von Wikipedia gehoert?
    https://en.wikipedia.org/wiki/Bilinear_interpolation

    Ich finde die Aufgabe nicht zu schwer. Ich weiss ja nicht, was du fuer Kenntnisse hast, aber du hast dich da ja immerhin beworben. Sei ein bisschen kreativ. Solltest du tatsaechlich keine Anweisungen fuer die Angabe von drei Farben bekommen haben, musst du dir halt was ausdenken.
    Interpolieren ist doch nicht so schwer. Auf einem Display mit 16 Pixeln Breite kann man halt keine schoenen Farbverlaeufe machen. Wenn man etwas kontinuierliches auf etwas diskretem darstellen moechte, sieht das "von nahem" eben nicht so knalle aus.

    Zu der Frage nach dem gruenen Farbverlauf: nur du kennst die genaue Aufgabenstellung, da wird was darueber drinstehen. Wenn nicht, die einfache Loesung waehlen.



  • Kathrin27 schrieb:

    sagen wir einer uebergibt mir 100 und 1600 als Farbwerte , welche Farbe das auch immer sein moege. Bei RGB 16 bit hat ja die Farbe gruen 6 bits. Sagen wir einer uebergibt mir helles gruen und dunkeles gruen. Eine Farbrampe wuerde dann ja nur aus gruenwerte von hell nach dunkel bestehen.

    Kommt so ziemlich hin soweit.

    Kathrin27 schrieb:

    Funktioniert da dieser einfache Ansatz Farbwert_rechts - Farbwert_links und teile durch Pixelbreite ?? Kommen da dann nicht andere farben raus ?

    Klar kommen da andere Farben raus.

    Du musst natürlich die RGB Triples als RGB Triples interpolieren.

    Was soll ich bei 3 Farben machen ?

    Lass dir halt 'was einfallen.
    Du könntest erstmal anhand irgend einer Formel die Farbe für die fehlende Ecke errechnen, und dann so tun als ob du 4 Farben bekommen hättest.
    Oder gucken ob du irgend einen schlauen Algorithmus findest mit dem du interpolieren kannst, ganz egal wie viele Samples du hast und wo diese liegen.



  • Also ich machs jetzt anders. Ich teile jeden Farbanteil durch die Pixelbreite.
    Beispiel : R = 100 , G = 25 ; B = 50 ; Sagen wir bei 10 Pixelbreite Rot wird in jedem Schritt um 10 verringert Gruen um 2.5 und Blau um 5 . Was haltet ihr davon ?


  • Mod

    Kathrin27 schrieb:

    Also ich machs jetzt anders. Ich teile jeden Farbanteil durch die Pixelbreite.
    Beispiel : R = 100 , G = 25 ; B = 50 ; Sagen wir bei 10 Pixelbreite Rot wird in jedem Schritt um 10 verringert Gruen um 2.5 und Blau um 5 . Was haltet ihr davon ?

    Das ist das, was hustbaer schon gesagt hat. Natürlich musst du alle Kanäle gesondert betrachten, wenn das Ergebnis auf sichtbare Weise mit den Eingangsdaten zu tun haben soll. Sonst käme bei einem Übergang von Blau nach Grün beispielsweise plötzlich Rot raus, anstatt ein Blau-Grün-Gemisch, was sicherlich nicht beabsichtigt ist.

    Ansonsten: Leg doch einfach los! Wenn du das irgendwie halbwegs sinnvoll programmierst, dann kommt irgendwo eine Funktion vor, die dir aus einer Koordinate und den vorgegebenen Farben einen Farbwert für diese Koordinate berechnet. Anstatt ewig zu überlegen, wie die Funktion aussehen sollte, würde ich erst einmal so weit programmieren, dass das funktioniert. Wie die genaue Funktion dann aussieht, kannst du dir immer noch überlegen.



  • Aber fuer ein Vorstellungsgespräch ist das schon krass oder. Ich brauch da mindestens 8 Stunden dafür.

    Also die Funktion soll so ausschauen .

    ramp.exe TopLeftColor TopRightColor [optional: BottomLeftColor] [BottomRightColor]

    Bei 2 Farben gibt es alleine schon 6 Moeglichkeiten.

    z.B. (1) TopLeftColor und TopRightColor
    (2) TopLeftColor und BottomLeftColor
    (3) TopRightColor und BottomLeftColor

    usw und sofort allein das schon rausfiltern ist schon der Hammer. Das Bedarf ja dann alles einer anderen Behandlung

    Und dann erst bei 4 Farben da muss man ja dann bilineare Interpolation anwenden.
    Gibt es da eine Formel ?


  • Mod

    Kathrin27 schrieb:

    Aber fuer ein Vorstellungsgespräch ist das schon krass oder. Ich brauch da mindestens 8 Stunden dafür.

    Ehrlich gesagt: Nein. Die Aufgabe ist simpel. Ich hätte sogar eher erwartet, dass man solch eine Aufgabe direkt vor Ort löst, in weniger als 30 Minuten (evtl. Vorgabe eines Frameworks zur Ausgabe). Oder wenn es als "Hausaufgabe" ist, dann mit deutlich höherem Anspruch, vielleicht mit Anforderungen, die dein Verständnis für Wahrnehmungstheorie (oder was auch immer für einen Displayhersteller wichtig ist) testen. Ein paar einfache Interpolationsformeln herleiten (oder zur Not im Internet nachschlagen) sollte jeder können.

    Bei 2 Farben gibt es alleine schon 6 Moeglichkeiten.

    z.B. (1) TopLeftColor und TopRightColor
    (2) TopLeftColor und BottomLeftColor
    (3) TopRightColor und BottomLeftColor

    usw und sofort allein das schon rausfiltern ist schon der Hammer. Das Bedarf ja dann alles einer anderen Behandlung

    Wieso denkst du, dass das alles einer Sonderbehandlung bedarf? 😕

    Und dann erst bei 4 Farben da muss man ja dann bilineare Interpolation anwenden.
    Gibt es da eine Formel ?

    Ja.



  • EDIT: zu spaet.

    Du hast doch schon gute, hilfreiche Antworten erhalten. Von dir hingegen kommt fast nur:

    Aber fuer ein Vorstellungsgespräch ist das schon krass oder. Ich brauch da mindestens 8 Stunden dafür.

    Mir erscheint die Aufgabe ziemlich schwierig fuer einen Test und konsumiert viel Zeit.

    usw und sofort allein das schon rausfiltern ist schon der Hammer. Das Bedarf ja dann alles einer anderen Behandlung

    Fuer mehr als 2 farben input soll ich uebrigends Bilinear interpolation verwenden.
    Sagt das jemand etwas ?

    (und spaeter, nachdem auf Wikipedia verwiesen wurde, wo es Formeln gibt:)

    Und dann erst bei 4 Farben da muss man ja dann bilineare Interpolation anwenden.
    Gibt es da eine Formel ?

    Ist dir klar, was das fuer einen Eindruck hinterlaesst? Du hast dich fuer etwas beworben und hast eine Aufgabe bekommen. Wenn du dich da korrekterweise beworben hast, solltest du diese Aufgabe auch loesen koennen. Ich habe nichts mit Farben, Displays und bilinearer Interpolation zu tun, die Aufgabe erscheint aber nicht unmenschlich schwer. 8 Stunden findest du viel? DU klingst zwischendurch, als haettest du noch nir programmiert. Das ist doch nur ein Tag, oder vielleicht drei, wenn du noch einen anderen Job hast, studierst, Kinder hast, was auch immer.

    Um nochmal zusammenzufassen, was ich und andere eh schon gesagt haben: Leg einfach mal los.
    Ist doch egal, was bilineare Interpolation ist. Wenn alles laeuft, kannst du das ja immer noch korrekt umsetzen. Aber du solltest in der Lage sein, Loesungen, die du noch nicht kennst, zu finden. Das wuerde ich als Arbeitgeber von dir erwarten. Das Problem ist auch nicht so schwierig. Beantworte doch mal diese Frage: Auf einer Scala steht links 30, rechts 50. Welcher Wert steht in der Mitte? Woher weisst du das?

    30 --------------- x --------------- 50

    Dann etwas "schwieriger":

    50 ------------- X -------------- 90
    |
    |
    X
    |
    |
    30 ------------- X -------------- 70

    Wie du auf 6 Moeglichkeiten kommst, weiss ich nicht. Ist doch auch egal. Das sind Zahlen, da musst du nicht auf irgendwelche Faelle speziell achten. Du kriegst eine Zahl und rechnest damit. Punkt.



  • Wie du auf 6 Moeglichkeiten kommst, weiss ich nicht

    Naja es werden 4 Paramter fuer die Ecken übergeben. Uebergibt einer nur 2 Farben dann koennen die an 2 von 4 moeglichen Positionen stehen.

    Jetzt gilt es erst mal rauszufinden welche Positionen das sind. Und die Behandlung ist dann auch anders.

    z.B. TopLeftCorner und TopRightCorner ist sicherlich die gleiche Behandlung wie
    BottomLeftCorner und BottomRightCorner. Aber TopLeftCorner und BottomRightCorner ist sicherlich anders.


  • Mod

    Kathrin27 schrieb:

    Wie du auf 6 Moeglichkeiten kommst, weiss ich nicht

    Naja es werden 4 Paramter fuer die Ecken übergeben. Uebergibt einer nur 2 Farben dann koennen die an 2 von 4 moeglichen Positionen stehen.

    Jetzt gilt es erst mal rauszufinden welche Positionen das sind. Und die Behandlung ist dann auch anders.

    z.B. TopLeftCorner und TopRightCorner ist sicherlich die gleiche Behandlung wie
    BottomLeftCorner und BottomRightCorner. Aber TopLeftCorner und BottomRightCorner ist sicherlich anders.

    Nein, da ist nichts anders. Wieso sollte es? Wenn du das 4-Farben Problem gelöst hast, hast du auch das 1-, 2- und 3-Farbenproblem gelöst, weil sich aus die fehlenden Eckfarben aus den gegebenen Eckfarben ergeben.



  • Nee da ich fuer 2 Farben die lineare Interpolation aber für mehr als 2 Farben eine bilineare Interpolation verwenden muss. Also ganz andere Algorithmen.



  • Nee da ich fuer 2 Farben die lineare Interpolation aber für mehr als 2 Farben eine bilineare Interpolation verwenden muss. Also ganz andere Algorithmen.





  • Kathrin27 schrieb:

    Nee da ich fuer 2 Farben die lineare Interpolation aber für mehr als 2 Farben eine bilineare Interpolation verwenden muss. Also ganz andere Algorithmen.

    Das musst du nur anders behandeln wenn du es dir unbedingt kompliziert machen willst.

    Aber erhlich: wenn du das nicht hinbringst, dann solltest du den Job auch nicht bekommen.
    Du wirst dort sowieso keinen unbefristeten Vertrag bekommen, und wenn man so weit weg von den gewünschten Kenntnissen und Fähigkeiten ist auf ne Verlängerung zu hoffen...



  • Um die einzelnen Farbanteile zu bekommen verwende ich Bitmasken.

    um den Rotanteil zu bekommen mache ich .

    unsigned short BitmaskeRot = 0xF800 ;

    unsigned short color;

    int Rotanteil = color & BitmaskeRot ;

    Später setze ich es wieder mit einer Or Verknüpfung wobei ich den Rotanteil erst wieder bei LinksShift geeignet verschiebe.

    Klingt kompliziert oder.



  • Kati27 schrieb:

    Klingt kompliziert oder.

    Das klingt kompliziert?
    Echt jetzt?



  • Naja 🙂

    Wenn einer nur 2 Farben übergibt dann seh ich gerade diese 3 Fälle.

    Rampe geht von links nach rechts (oder umgekehrt)
    Rampe geht von oben nach unten (oder umgekehrt)
    Rampe geht diagonal (das klingt wahnsinnig schwierig )

    Dafür verwende ich lineare Interpolation.

    color = (1-t) *c1 + t * c2 ; //t[0 1]
    

    Kann man das irgendwie durch ein einziges Model abbilden ?



  • Hey Leute also wenn dieser Bewerbungstest nicht schwierig und zeitaufwendig ist dann weiss ich echt nicht mehr. Hier hab ich jetzt mal ein Beispiel für 2 Farben gefunden. Und wie ich schon immer gesagt habe das sind unterschiedliche Fälle.
    Und für 4 Farben das ist wieder ein anderer Fall und anderer Algorithmus !!

    http://www.ucancode.net/Visual_C_Source_Code/Draw_Vertical_Gradient_Horizontal_Gradient_and_Diagonal_gradient_with_vc.htm

    Würde mir jede Firma so was schicken dann könnte ich mich pro Woche nur bei einer Firma bewerben !!



  • Überlege Dir einmal ob das nicht wirklich vielleicht nur ein einziger Fall sein kann? Nämlich eine bilineare Interpolation mit vier Farben an den vier Eckpunkten. So ziemlich jeden genannten Fall kann man wohl darauf zurückführen.

    Aber eigentlich ist das doch hier nur Getrolle, oder nicht? Was sagen die Web-Experten?



  • Und wenn ich jetzt nur mal den Fall diagonal betrachte dann erzeugt dieser auch schon wieder 4 Fälle. nämlich es könnte

    (1) von links oben nach rechts unten
    (2) von links unten nach rechts oben
    (3) von rechts oben nach links unten
    (4) von rechts unten nach links oben

    Für jeden dieser Fälle muss ich wieder anderen Code schreiben. Ich glaub ich sag der Firma ab 🙂



  • Das ist echt kein Getrolle. Wäre das nicht Overkill etwas lineares mit etwas bilineares abzubilden. Das dauert doch viel länger etc.


Anmelden zum Antworten