User:QQuix/Distances and Angles


Three angle systemsEdit

The game uses three angle ‘systems’:

World AngleEdit

Range – 0-360 - 0 degrees is up, increasing clockwise up to 360. (e.g: 90 = Right, 180 = Down, 270 = Left).

This is the most common. It is the angle you find in the CS for Reference Rotation.

This type of angle is returned by: GetAngle Z, GetStartingAngle

This type of angle must be provided for: SetAngle Z

Heading AngleEdit

Range – -180 to +180 - 0 degrees is up, increasing clockwise up to 180 and decreasing counterclockwise down to -180. (e.g: 90 = Right, 180 = Down, -90 = Left, -180 = Down).

This is used to tell how a second object is positioned in relation to a first object heading

This type of angle is returned by: GetHeadingAngle

Trigonometric AngleEdit

Range – 0 to 360 - 0 degrees is right, increasing counterclockwise up to 360. (e.g: 90 = Up, 180 = Left, 270 = Down). This is the standard trigonometric angle system.

This type of angle must be provided for OBSE trigonometric functions: Sin, Cos, Tan, etc

Sample code (2D)Edit

DeltaX & DeltaY from Angle and distanceEdit

Useful when positioning an object at a given distance and angle from another object

;=================================
; Get:  DeltaX and DeltaY
; From:	Angle and distance
;=================================
set xAngle to xxx
set xDistance to xxx
if  xAngle <= 90
  set xxTrigAngle  to 90 - xAngle
else
  set xxTrigAngle to 450 - xAngle
endif 
set xDeltaX to xDistance * cos xxTrigAngle 
set xDeltaY to xDistance * sin xxTrigAngle 

Angle and distance from DeltaX & DeltaYEdit

Useful to calculate the horizontal (2D) distance between two objects or in situations where GetDistance is not reliable.

Useful to calculate the heading angle in situations where GetHeadingAngle is not reliable (non-actors).

;=================================
; Get:  Angle and distance
; From: DeltaX and DeltaY
;=================================
set xAngle to atan2 xDeltaX xDeltaY   	;	returns -180 to +180
if xAngle  < 0
  set xAngle to xAngle + 360   		;	convert to 0-360
endif

set xDistance to ( xDeltaX * xDeltaX ) + ( xDeltaY * xDeltaY )
set xDistance to sqrt xDistance

Adding two anglesEdit

Self explanatory

;=================================
; Get:  Angle 
; From: Adding two angles
;=================================
set xAngle to xAngleA + xAngleB
if xAngle > 360
  set xAngle to xAngle - 360
endif
if xAngle < 0
  set xAngle to xAngle + 360
endif

Sample code (3D)Edit

WIP


TO DO:

  • 3D
  • Turn into User Functions