| 354 | | |
|---|
| 355 | | |
|---|
| | 354 | /*======================================================================*//** |
|---|
| | 355 | * 回転砲台のアルゴリズム |
|---|
| | 356 | * 現在角度から目標角度に到達するために必要となる最短の回転角を返します |
|---|
| | 357 | * 角度は時計回りを正の方向とします |
|---|
| | 358 | * @author alumican |
|---|
| | 359 | * @param current 現在の角度, 単位[rad] |
|---|
| | 360 | * @param target 目標の角度, 単位[rad] |
|---|
| | 361 | * @return 目標へ到達するための差分角度, 単位[rad], 範囲(-2π,2π) |
|---|
| | 362 | *//*=======================================================================*/ |
|---|
| | 363 | public static function earliestRotation(__current:Number, __target:Number):Number { |
|---|
| | 364 | var pi2:Number = 2 * Math.PI; |
|---|
| | 365 | var d:Number = __target % pi2 - __current % pi2; |
|---|
| | 366 | if(d < 0) { d += pi2; } |
|---|
| | 367 | if(d > Math.PI) { d -= pi2; } |
|---|
| | 368 | return d; |
|---|
| | 369 | |
|---|
| | 370 | /* --- sticky -------------------------------------------------------------------------- * |
|---|
| | 371 | * :dが[-π,0)のときに無駄な計算をしている気がする |
|---|
| | 372 | * :これでも大丈夫ぽいけど,剰余計算が重そう |
|---|
| | 373 | * return( ((target % pi2) - (current % pi2) + 3 * Math.PI) % (2 * Math.PI) - Math.PI; |
|---|
| | 374 | * ------------------------------------------------------------------------------------- */ |
|---|
| | 375 | } |
|---|
| | 376 | |
|---|