Gambar garis hingga tak terbatas dan hitung berapa kali Anda melewati bentuk (genap atau ganjil), tidak termasuk segmen tempat makhluk itu berada. Kemudian periksa apakah makhluk itu pergi ke kiri atau kanan garis itu.
Dalam contoh ini, kami menyilangkan bentuk dua kali (bahkan genap) dan kami pergi ke kiri. Hasilnya langsung dari tabel ini:
# Crosses | even | odd
Direction | |
-------------+-------+------
left | CCW | CW
right | CW | CCW
Dalam pseudocode:
x, y = position of creature
vx, vy = direction of creature movement
crossings = 0
for each x1, y1, x2, y2 in shape segments:
if (x1 < x and x <= x2) or (x2 < x and x <= x1):
if y - y1 > (x - x1) * (y2 - y1) / (x2 - x1):
++crossings
if (crossings & 1) == (vx < 0):
return CW
else
return CCW