1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Rechtecksdrehung im Koordinatensystem

  • Stampi
  • 17. April 2008 um 10:30
  • Unerledigt
  • Stampi
    3
    Stampi
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 17. April 2008 um 10:30
    • #1

    Ich arbeite an einem bauphysikalischen Programm zur Berechnung des Heizwärmebedarfs von Gebäuden. Das Hauptproblem liegt bei mir darin, dass in einer kleinen Vorschauskizze die rechteckige Grundfläche eines Hauses (a, b) im richtigen Verhältnis gezeichnet werden soll. Dadurch, dass ein Computerbildschirm in einzelne Bildpunkte geteilt ist, kann man sich das ganze als Kartesisches Koordinatensystem vorstellen. Die Vorschau mit einem normalen Rechteck funktioniert bereits jedoch habe ich ein Problem damit, dass man auch einen Winkel alpha festlegen kann, der die Abweichung des Grundstückes von Norden angibt, sprich das Rechteck soll im Koordinatensystem entsprechend dem Winkel alpha gedreht werden. Das Problem, dass ich jetzt habe, ist, dass ich nicht genau weiß wie ich die Koordinaten der Punkte (A, B, C, D) des gedrehten Rechteckes ermitteln kann. Ich habe zwar schon probiert, das Problem mit Vektoren bzw. Matrizen zu lösen, bis jetzt aber ohne Erfolg.

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Mit freundlichen Grüßen

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 17. April 2008 um 11:05
    • #2

    Das geht ganz leicht - du schreibst eine 2x2 Transformationsmatrix A, und in deren 1. Spalte schreibst du den Vektor, zu dem der gedrehte x-Einheitsvektor werden soll. In die zweite Spalte den gedrehten y-Einheitsvektor. Dann rechnest du A*p für jeden Punkt p aus - fertig.

    Der gedrehte x-Einheitsvektor wäre z.B. (für eine Drehung um α nach links, um den Ursprung):

    (cos α, sin α) - das musst du aber in Spaltenforum hinschreiben

    Und der gedrehte y-Einheitsvektor ist dann wohl:

    (-sin α, cos α)

    Alles aus den Fingern gesogen, keine Garantie für Korrektheit :winking_face:

  • Stampi
    3
    Stampi
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 17. April 2008 um 11:58
    • #3

    Hallo!

    Ja so in der Richtungen, hatte ich es ja auch nur dann sieht die Darstellung im Programm wie folgt aus und nicht wie sie tatsächlich sein soll.

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 17. April 2008 um 17:22
    • #4

    Sieht so aus, als hättest du irgendwo im Code Koordinaten und/oder Vorzeichen vertauscht.

  • Stampi
    3
    Stampi
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 17. April 2008 um 17:25
    • #5

    Ich weiß nicht, haber aber alles genau kontrolliert, doch es wird immer verzerrt dargestellt, habe mir eh schon viele Anleitungen über Matrizen und so durchgelesen, doch ich habe es bis jetzt noch nicht so hinbekommen.

    Danke, für deine bisherigen Antworten.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 17. April 2008 um 19:43
    • #6

    sin und cos nehmen ihre Argumente üblicherweise in Radianten, nicht in Grad. Vielleicht ist das ein Problem? (Ich glaub eigentlich fast nicht, weil ich mir so auf die Schnelle keine Verzerrung dadurch erklären kann.)

    *plantsch*

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 17. April 2008 um 20:47
    • #7

    Zeig einfach den Code her. Wahrscheinlich kommst du dann eh auf den Fehler drauf, während du gerade am Posten bist :winking_face:

  • Stampi
    3
    Stampi
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 18. April 2008 um 08:41
    • #8

    Also das ist der Code, der die ursprünglichen Koordinaten in die neuen Koordinaten umwandelt.

    `$1...x1
    `$2...y1
    `$3...x2
    `$4...y2
    `$5...x3
    `$6...y3
    `$7...x4
    `$8...y4
    `$9...Winkelverschiebung um alpha(-180°-180°)

    C_INTEGER($1;$2;$3;$4;$5;$6;$7;$8;$9)
    C_INTEGER($x_1;$x_2;$x_3;$x_4;$y_1;$y_2;$y_3;$y_4)
    C_INTEGER($M_x;$M_y)
    C_INTEGER($x1;$x2;$x3;$x4;$y1;$y2;$y3;$y4)
    C_REAL($alpha)

    $alpha:=$9*Degree

    If (($alpha=0) | ($9=180) | ($9=(-180)))
    $x_1:=$1
    $y_1:=$2
    $x_2:=$3
    $y_2:=$4
    $x_3:=$5
    $y_3:=$6
    $x_4:=$7
    $y_4:=$8
    Else
    If ($9<0)

    $x_1:=$1*Cos($alpha)-$2*Sin($alpha)
    $x_2:=$3*Cos($alpha)-$4*Sin($alpha)
    $x_3:=$5*Cos($alpha)-$6*Sin($alpha)
    $x_4:=$7*Cos($alpha)-$8*Sin($alpha)

    $y_1:=$1*Sin($alpha)+$2*Cos($alpha)
    $y_2:=$3*Sin($alpha)+$4*Cos($alpha)
    $y_3:=$5*Sin($alpha)+$6*Cos($alpha)
    $y_4:=$7*Sin($alpha)+$8*Cos($alpha)
    Else
    $alpha:=$alpha*(-1)

    $x_1:=$1*Cos($alpha)-$2*Sin($alpha)
    $x_2:=$3*Cos($alpha)-$4*Sin($alpha)
    $x_3:=$5*Cos($alpha)-$6*Sin($alpha)
    $x_4:=$7*Cos($alpha)-$8*Sin($alpha)

    $y_1:=$1*Sin($alpha)+$2*Cos($alpha)
    $y_2:=$3*Sin($alpha)+$4*Cos($alpha)
    $y_3:=$5*Sin($alpha)+$6*Cos($alpha)
    $y_4:=$7*Sin($alpha)+$8*Cos($alpha)
    End if
    End if

    ARRAY INTEGER(koord;8)

    koord{1}:=$x_1
    koord{2}:=$y_1
    koord{3}:=$x_2
    koord{4}:=$y_2
    koord{5}:=$x_3
    koord{6}:=$y_3
    koord{7}:=$x_4
    koord{8}:=$y_4

    $0:=koord

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 18. April 2008 um 11:44
    • #9

    Schaut jetzt auf den ersten Blick nicht so falsch aus, auch wenn diese ganzen Fallunterscheidungen in Abhängigkeit vom Winkel völlig umsonst sind.

    Wie wird denn das dargestellt? Vielleicht sind einfach die Achsen unterschiedlich skaliert.

  • Stampi
    3
    Stampi
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 18. April 2008 um 12:03
    • #10

    C_REAL($1;$2)
    C_REAL($ges)
    C_INTEGER($laenge;$breite;$links;$oben;$3)

    $CTOffscr:=CT New offscreen area
    CT SET DOCUMENT SIZE ($CTOffscr;300;350)

    $ges:=$1+$2
    $laenge:=(150/$ges)*$1
    $breite:=(150/$ges)*$2

    $links:=(150-$laenge)/2
    $oben:=(150-$breite)/2


    ARRAY INTEGER(koord;8)
    koord:=PROJ_AssistentWinkelVersch ($links;$oben;$links+$laenge;$oben;$links+$laenge;$oben+$breite;$links;$oben+$breite;$3)

    ARRAY INTEGER(koordX;5)
    ARRAY INTEGER(koordY;5)

    For ($i;1;8)
    koord{$i}:=koord{$i}+150
    End for

    koordX{1}:=koord{1}

    koordX{2}:=koord{3}
    koordX{3}:=koord{5}
    koordX{4}:=koord{7}

    koordY{1}:=koord{2}
    koordY{2}:=koord{4}
    koordY{3}:=koord{6}

    koordY{4}:=koord{8}

    koordX{5}:=koordX{1}
    koordY{5}:=koordY{1}

    $0:=CT Array to polygon ($CTOffscr;koordX;koordY)

    $pict:=CT Area to picture ($CTOffscr;-2)
    [Projekt];"ProjektAssistent"PictFormLage:=$pict
    CT DELETE OFFSCREEN AREA ($CTOffscr)

  • Wolfibolfi
    37
    Wolfibolfi
    Mitglied
    Reaktionen
    186
    Punkte
    14.936
    Beiträge
    2.942
    • 18. April 2008 um 12:17
    • #11

    Weiß jetzt nicht genau, wie sich das äußert, aber ich würd an deiner Stelle keine Integers für die Koordinaten verwenden, auch wenns am Bildschirm dann wieder ints sind. Rechne intern besser mit Gleitkommazahlen.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 18. April 2008 um 12:20
    • #12

    Was ist das überhaupt für eine scheußliche Programmiersprache? :winking_face:

  • Stampi
    3
    Stampi
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 18. April 2008 um 12:27
    • #13

    Ok, dankeschön.
    Werd ich dann mal ausprobieren

    Programmiersprache ist
    4th Dimension

  • Stampi
    3
    Stampi
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 18. April 2008 um 13:45
    • #14

    Habs jetzt ausprobiert, dass erst kurz bevor gezeichnet wird erst Integer verwendet wird, ändert sich jedoch nicht wirklich etwas.

  • Stampi
    3
    Stampi
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 22. April 2008 um 13:18
    • #15

    Danke,
    Problem ist gelöst.

    Der Fehler lag bei der Klammernsetzung da 4th Dimension "Punkt vor Strich" nicht kennt.

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 22. April 2008 um 14:12
    • #16

    :) :)

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 2 Besucher

Rechtliches

Impressum

Datenschutzerklärung