Kurze Frage zu Anordnung von Variablen einer Rectangle-Klasse



  • Hallo,

    habe rect4 Klasse, die vier Variablen enthält: left, right, bottom, top.

    4!=1234=244!=1\cdot 2\cdot 3\cdot 4 =24

    Also insgesamt gäbe es 24 Möglichkeiten diese Variablen anzuordnen, also auch zum Beispiel im ctor.

    Ist left, bottom, right, top die besser Anordnung, bzw. ist es so üblich und alles andere verwirrend? Also RECT von Windows SDK vertauscht top und bottom.



  • @titan99_
    Alexandrescu empfielt, die am häufigsten benutzten Elemente nach vorne zu stellen. Ob das hier entscheidend ist sei mal dahingestellt 😉
    Das kannst du nach Gefühl entscheiden, denke ich, ich würde mich mit links, oben, rechts und unten ganz gut fühlen.
    Ist das für irgendwas relevant?



  • @DocShoe sagte in Kurze Frage zu Anordnung von Variablen einer Rectangle-Klasse:

    Ist das für irgendwas relevant?

    Also es ist in einem Koordinatensystem, wo die x-Achse nach rechts zunimmt und die y-Achse nach oben zunimmt, d. h. eher zuerst bottom und dann top.

    Edit: Habe die Permutationen mit std::next_permutation ausgeben lassen:

    left right bottom top
    left right top bottom
    left bottom right top
    left bottom top right
    left top right bottom
    left top bottom right
    right left bottom top
    right left top bottom
    right bottom left top
    right bottom top left
    right top left bottom
    right top bottom left
    bottom left right top
    bottom left top right
    bottom right left top
    bottom right top left
    bottom top left right
    bottom top right left
    top left right bottom
    top left bottom right
    top right left bottom
    top right bottom left
    top bottom left right
    top bottom right left
    

    Ich denke ich werde zu left bottom right top wechseln. Das ergibt dann zwei 2-Komponenten-Vektoren, intuitiv left bottom und right top des Rechtecks.



  • @titan99_ sagte in Kurze Frage zu Anordnung von Variablen einer Rectangle-Klasse:

    Also RECT von Windows SDK vertauscht top und bottom.

    weil in der WinAPI zwei POINTs ein RECT sind:

    typedef long LONG;
    
    typedef struct tagPOINT
    {
        LONG  x;
        LONG  y;
    } POINT;
    
    typedef struct tagRECT
    {
        LONG    left;
        LONG    top;
        LONG    right;
        LONG    bottom;
    } RECT;
    

    und man so duck-typing type-punning machen kann.



  • Left, Top, Right, Bottom ist üblich. Grund: Left, Top ist in "x, y" Reihenfolge und Right, Bottom ebenso. D.h. das Memory Layout ist identisch zu

    struct {
        Point topLeft;
        Point bottomRight;
    };
    

    Was in Screen-Koordinaten total Sinn macht.

    Bzw. die Reihenfolge ist halt "min X, min Y, max X, max Y". Und genau diese würde ich dir auch empfehlen.

    Wenn Y so wie bei Screen Koordinaten nach unten wächst, dann ergibt sich daraus Left, Top, Right, Bottom. Und wenn Y wie in der Mathe üblich nach oben wächst, dann ergibt sich Left, Bottom, Right, Top.



  • @Swordfish sagte in [Kurze Frage zu Anordnung von Variablen einer Rectangle-Klasse]

    und man so duck-typing machen kann.

    Quack-Quack!
    Ich glaube du meinst Type-Punning.
    (Wobei man das natürlich als eine Art "memory layout duck typing" ansehen könnte. If it's memory layout looks like a duck, it's a duck. Oder so. Sagt man so aber glaube ich nicht.)



  • @hustbaer sagte in Kurze Frage zu Anordnung von Variablen einer Rectangle-Klasse:

    Ich glaube du meinst Type-Punning.

    glaube ich auch. quaak.


Log in to reply