OpenSiv3D icon indicating copy to clipboard operation
OpenSiv3D copied to clipboard

Vec2::normalized_or(Vec2 v)などの追加

Open comefrombottom opened this issue 1 year ago • 4 comments

追加する機能の内容 | Describe the solution you'd like Vec2::normalized_or(Vec2 v) 正規化する。ゼロベクトルの場合はvを返す。

https://discord.com/channels/443310697397354506/999983621408567326/1177667355749400617

その機能の追加によって解決する問題 | Is your feature request related to a problem? Please describe. //今まで Vec2 dir = enemy_pos-player_pos; Vec2 n=dir.isZero()?Vec2{0,0}:dir.normalized();

//改善後 Vec2 n=(enemy_pos-player_pos).normalized_or({0,0});

備考 | Additional context normalized_or({0,0})以外の用法としてはnormalized_or({1,0}),normalized_or(RandomVec2())などを想定

comefrombottom avatar Nov 24 '23 18:11 comefrombottom

getAngle_or(double angle), getAngle_or(Vec2 other,double angle)もあると統一的だと思った。_orより、ゼロベクトル時の挙動を決めるフラグを渡すようなオーバーロードを追加するのもあり。

comefrombottom avatar Dec 26 '23 03:12 comefrombottom

Vec2::setLength(1.0) はゼロベクトルに対してゼロベクトルを返します。 これで良いかもと思うのですが、どうでしょう。

Reputeless avatar Jun 22 '24 10:06 Reputeless

改めて考えてみて機運が高まったので v0.6.15 に入れようと思います。

Reputeless avatar Jun 22 '24 10:06 Reputeless

そもそもゼロベクトルに対する .normalize() はゼロベクトルを返すのが世間のエンジンでは一般的のようで、そこから改め、ついでに .normalize_or(v) も加えようと思います。

Reputeless avatar Jun 22 '24 11:06 Reputeless