OpenSiv3D
OpenSiv3D copied to clipboard
Vec2::normalized_or(Vec2 v)などの追加
追加する機能の内容 | 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())などを想定
getAngle_or(double angle), getAngle_or(Vec2 other,double angle)もあると統一的だと思った。_orより、ゼロベクトル時の挙動を決めるフラグを渡すようなオーバーロードを追加するのもあり。
Vec2::setLength(1.0)
はゼロベクトルに対してゼロベクトルを返します。
これで良いかもと思うのですが、どうでしょう。
改めて考えてみて機運が高まったので v0.6.15 に入れようと思います。
そもそもゼロベクトルに対する .normalize()
はゼロベクトルを返すのが世間のエンジンでは一般的のようで、そこから改め、ついでに .normalize_or(v)
も加えようと思います。