Facing Away

Waaaaagh

I lost all my rep and my title being a jerk
Reaction score
70
What is the best (most accurate) way of determining if a unit is facing away from another unit?
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
888
Is there any other way than comparing facing angles?
I would use that since I know of no other. :p
 
Reaction score
456
Ops.. no no no.. I did a bit wrong formula x)

But if it doesn't have to be so precise.. or does it have to be?

EDIT://Just forget that ;D
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
888
> Angle Between the two units..

That's between points and doesn't care about unit facing, though....
 
Reaction score
456
Precise:
Code:
(Facing of <unit one>) Equal to (0.00 - (Angle from (Position of <unit one>) to (Position of <unit two>)))

Does that work? I don't have time to do better.. and that leaks :p
 

Waaaaagh

I lost all my rep and my title being a jerk
Reaction score
70
The issue arises with the fact that, realistically, 30* is only 40* away from 350* (while mathematically, that doesn't work). I tried working that bit out with a complicated function, and still it doesn't work. Take a look:

JASS:
    function InFront takes real face, real angle returns boolean
        local real facemin
        local real facemax
        local boolean min=false
        local boolean max=false
        if(face&lt;70)then
            set facemin=360-(70-face)
            set facemax=face+70
            set min=true
        elseif(face&gt;300)then
            set facemax=0+(70-face)
            set facemin=face-70
            set max=true
        else
            set facemin=face-70
            set facemax=face+70
        endif
        set face=face
        set angle=angle
        return (min and (angle&gt;facemin or angle&lt;facemax)) or (max and (angle&lt;facemax or angle&gt;facemin)) or (angle&gt;facemin and angle&lt;facemax) 
    endfunction


This one is supposed to return true if the facings are within 70* of each other. Right now, it works, unless the units (both) are facing south.

U..< U........^
V........U >..U

The first bit will return false (note: the facing angle of U doesn't matter, as I am getting the angle between the two units, and comparing the facing of the second to that).
 

Hero

─║╣ero─
Reaction score
250
Facing away?

Hmhm

Like this?

Unit A -- ^
Unit B -- ^

Like a backstab?

Then check if they are facing the same angle + 15 and -15 (for some leniency)
 

Waaaaagh

I lost all my rep and my title being a jerk
Reaction score
70
Hero12341234, you completely failed to notice the problem. Anyway, I found out mine: I was plugging the wrong stuff into Atan2 (where I got angle from). That function InFront does work, and removes the 'glitch' of the 360 -> 0 angle.
 
Reaction score
456
I have a question at this point. How does the Modulo work, in short words?

Please Ace, do not give me a link to wikipedia once again.. :rolleyes:
 

AceHart

Your Friendly Neighborhood Admin
Reaction score
1,495
The value of b, in the congruence a=b (mod m), taken to be nonnegative and smaller than m.


Mod(a,b) is the rest of the division of a by b.

Mod(0,3) = 0
Mod(1,3) = 1
Mod(2,3) = 2
Mod(3,3) = 0 (Hey, we found a multiple of 3! :p)
Mod(4,3) = 1
Mod(5,3) = 2
Mod(6,3) = 0 (Another one)
Mod(7,3) = 1
...

Usually only used on integers, but the formula holds on reals just nicely :p


> give me a link to wikipedia

Sure, here it comes: http://en.wikipedia.org/wiki/Modulo_operation
 

N-a-z-g-u-l

New Member
Reaction score
30
JASS:
function DiffBetweenAngles takes real angle1, real angle2 returns real
	local real diff = angle2-angle1
	if diff&lt;0 then
		set diff = diff + 360
	endif
	if diff&gt;180 then
		return 360-diff
	endif
	return diff
endfunction


thats what i use to determine the difference between 2 angles... IsInBack might already work, but for everyone else who also has that problem, that function works just fine ;)
(it expects arguments between 0 and 360)... if you are not sure if they really will be in that range, you can also use that one:

JASS:
function DiffBetweenAngles takes real angle1, real angle2 returns real
	local real diff = ModuloReal(angle2-angle1,360)
	if diff&gt;180 then
		return 360-diff
	endif
	return diff
endfunction


just the same, but slower, and more flexible
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top