system
September 26, 2018, 8:46pm
1
Attention
Topic was automatically imported from the old Question2Answer platform.
Asked By
Afsar Pasha
For example,
print(Vector2(5,6)>Vector2(1,56))
Prints True
According to vector2.h it’s correct,
bool operator<(const Vector2 &p_vec2) const { return (x == p_vec2.x) ? (y < p_vec2.y) : (x < p_vec2.x); }
But I think it should be like this,
bool operator<(const Vector2 &p_vec2) const { return (x < p_vec2.x) && (y < p_vec2.y) ); }
I also found this issue in GitHub #9284 and is closed. There are 2 comments describing the the issue but I can’t understand it. Can anyone explain it in detail?
system
September 26, 2018, 10:23pm
2
Reply From:
xPheRe
Vectors can be used as keys in dictionaries, so the following is valid code:
var grid = {}
var direction = Vector2(0.0, 0.0)
grid[direction] = 1.0
To allow this, keys must fulfill some conditions, one of them is that if a > b == true
then b > a == false
(also if a >= b
and b >= a
then a == b
)
With your suggestion, two vectors like (2, 3)
and (3, 2)
would return false
when compared, no matter in what order you do.
Hope this helps a bit.
You mean (2, 3) < (3, 2)
and (3, 2) < (2, 3)
both returns false
?
Afsar Pasha | 2018-09-27 18:32
system
September 26, 2018, 11:15pm
3
Reply From:
MysteryGM
The example you give is True, because a vector isn’t just a size, it is also a direction.
Instead if you want to compare only the size use:
print(Vector2(5,6).length() > Vector2(1,56).length())
To compare direction use dot product.