PureBoard
https://www.purebasic.fr/german/

Berechnete Koordinaten ungenau
https://www.purebasic.fr/german/viewtopic.php?f=4&t=31337
Seite 1 von 1

Autor:  mk-soft [ 10.03.2019 14:13 ]
Betreff des Beitrags:  Berechnete Koordinaten ungenau

Das Grafik Objekt kann gedreht werden.
Der Drehpunkt ist immer oben link und Winkel 0 ist oben und im im Uhrzeigersinn.

Mathematisch ist Winkel 0 rechts und gegen den Uhrzeigersinn.

Ich glaube das ich jetzt richtig rechne, aber das Ergebnis ist ist genau
Bei Winkel 0 müsste Display X = 900 und Display Y = 850 sein
Code:
;-TOP

; x, y = Mitte Objekt
; angle = -180 .. 180 (Degree); Winkel 0 = Oben; Uhrzeigersin
; dx, dy = Breite und höhe Objekt

; Koordinaten raum = Oben Links Null
; Koordinaten objekt = mitte
; Drehpunkt object = oben links

Procedure Position(x, y, angle, dx, dy, *display_x.integer, *display_y.integer)
  Protected c0.d, alpha.d, a_object.d, alpha2.d
  Protected a0.d, b0.d, a1.d, b1.d
 
  a0 = dx / 2
  b0 = dy / 2
 
  c0 = Sqr(a0 * a0 + b0 * b0)
  alpha_objekt = ATan(dy/dx)
  alpha = Radian(270 - angle)
 
  alpha2 = alpha - alpha_objekt
  a1 = Sin(alpha2) * c0
  b1 = Cos(alpha2) * c0
 
  *display_x\i = x + a1
  *display_y\i = y + b1
 
EndProcedure

Global x = 1000
Global y = 1000
Global dx = 200
Global dy = 300

Global x1.integer
Global y1.integer

For angle = 0 To 180 Step 45
  Position(x,y,angle,dx,dy, @x1, @y1)
  Debug "Winkel = " + angle
  Debug "Display X = " + x1\i
  Debug "Display Y = " + y1\i
Next

Autor:  Sirius-2337 [ 10.03.2019 14:52 ]
Betreff des Beitrags:  Re: Berechnete Koordinaten ungenau

Einmal EnableExplicit drüber setzen, dann weisst du wo der Fehler liegt.

Autor:  STARGÅTE [ 10.03.2019 17:58 ]
Betreff des Beitrags:  Re: Berechnete Koordinaten ungenau

Code:
Protected c0.d, alpha.d, a_object.d, alpha2.d

Im Code verwendest du aber
Code:
alpha_objekt = ATan(dy/dx)

Somit wäre alpha_objekt eine Integer.

Außerdem solltest du ATan2(dx, dy) benutzen, um die Definitionslücke bei dx=0 zu vermeiden und einen Vollkreis als Ergebnis zu bekommen.

Autor:  mk-soft [ 10.03.2019 18:44 ]
Betreff des Beitrags:  Re: Berechnete Koordinaten ungenau

Danke, also beim rumbasteln auch EnableExplicit verwenden 8)

Das muss nachher als VB-Script umgesetzt werden und in einer Visualisierung laufen (WinCC)
Funktion ATan2 gibt es nicht unter VBS. Ausserdem ist dx und dy immer größer Null.

Oder ich rechne es vor her in der SPS aus, da aus dieser die Koordinaten kommen.

Geht es noch etwas einfacher, oder ist diese schon optimal gelöst?

Autor:  STARGÅTE [ 10.03.2019 19:10 ]
Betreff des Beitrags:  Re: Berechnete Koordinaten ungenau

mk-soft hat geschrieben:
Geht es noch etwas einfacher, oder ist diese schon optimal gelöst?

Du könntest es mit der Drehmatrix machen:
Code:
Procedure Position(x, y, angle.d, dx, dy, *display_x.integer, *display_y.integer)
  Protected a0.d, b0.d, a1.d, b1.d
 
  a0 = dx / 2
  b0 = dy / 2
  angle = Radian(angle)
 
  a1 = Cos(angle) * a0 - Sin(angle) * b0
  b1 = Sin(angle) * a0 + Cos(angle) * b0
 
  *display_x\i = x - a1
  *display_y\i = y - b1
 
EndProcedure
Das spart das ATan und die Wurzel und Sin() und Cos kannst du vllt noch zwischenspeichern.

Autor:  mk-soft [ 10.03.2019 19:51 ]
Betreff des Beitrags:  Re: Berechnete Koordinaten ungenau

Super :allright:

Danke STARGATE

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/