Seite 1 von 1

Berechnete Koordinaten ungenau

Verfasst: 10.03.2019 14:13
von mk-soft
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: Alles auswählen

;-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

Re: Berechnete Koordinaten ungenau

Verfasst: 10.03.2019 14:52
von Sirius-2337
Einmal EnableExplicit drüber setzen, dann weisst du wo der Fehler liegt.

Re: Berechnete Koordinaten ungenau

Verfasst: 10.03.2019 17:58
von STARGÅTE

Code: Alles auswählen

Protected c0.d, alpha.d, a_object.d, alpha2.d
Im Code verwendest du aber

Code: Alles auswählen

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.

Re: Berechnete Koordinaten ungenau

Verfasst: 10.03.2019 18:44
von mk-soft
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?

Re: Berechnete Koordinaten ungenau

Verfasst: 10.03.2019 19:10
von STARGÅTE
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: Alles auswählen

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.

Re: Berechnete Koordinaten ungenau

Verfasst: 10.03.2019 19:51
von mk-soft
Super :allright:

Danke STARGATE