| 144 | | * 2次ベジェ曲線を描くための座標を求めます。 |
|---|
| 145 | | * 引数には x, y の数値プロパティを持つオブジェクトを3つと中間点の数を渡す必要があります。 |
|---|
| | 142 | * 2次ベジェ曲線を描くための座標を求めます. |
|---|
| | 143 | * 引数には x, y の数値プロパティを持つオブジェクトを3つと中間点の数を渡す必要があります. |
|---|
| | 144 | * <listing> |
|---|
| | 145 | * import flash.display.Sprite; |
|---|
| | 146 | * import flash.geom.Point; |
|---|
| | 147 | * import com.seyself.math.GeomMath; |
|---|
| | 148 | * |
|---|
| | 149 | * var t:Number = 0; |
|---|
| | 150 | * var a:Point = new Point( 0, 0 ); |
|---|
| | 151 | * var b:Point = new Point( 20, 70 ); |
|---|
| | 152 | * var c:Point = new Point( 100, 100 ); |
|---|
| | 153 | * |
|---|
| | 154 | * var sprite:Sprite = new Sprite(); |
|---|
| | 155 | * this.addChild( sprite ); |
|---|
| | 156 | * sprite.graphics.lineStyle( 1 , 0 , 1 ); |
|---|
| | 157 | * sprite.graphics.moveTo( a.x , a.y ); |
|---|
| | 158 | * for(t=0;t<=1;t+=0.05){ |
|---|
| | 159 | * var p:Point = GeomMath.quadraticBezier( a, b, c, t ); |
|---|
| | 160 | * sprite.graphics.lineTo( p.x , p.y ); |
|---|
| | 161 | * trace( p ); |
|---|
| | 162 | * } |
|---|
| | 163 | * </listing> |
|---|
| 152 | | * @usage <code> |
|---|
| 153 | | * import com.seyself.math.GeomMath; |
|---|
| 154 | | * var a = { x:0 , y:0 }; |
|---|
| 155 | | * var b = { x:60 , y:120 }; |
|---|
| 156 | | * var c = { x:200 , y:200 }; |
|---|
| 157 | | * var leng = 30; |
|---|
| 158 | | * var path = GeomMath.quadraticBezierPath( a, b, c, leng ); |
|---|
| 159 | | * var bexir = this.createEmptyMovieClip( "bezir" , 0 ); |
|---|
| 160 | | * bexir.lineStyle( 1 , 0 , 100 ); |
|---|
| 161 | | * bexir.moveTo( path[0].x , path[0].y ); |
|---|
| 162 | | * for(var i=1;i<path.length;i++){ |
|---|
| 163 | | * bexir.lineTo( path[i].x , path[i].y ); |
|---|
| | 170 | */ |
|---|
| | 171 | public static function quadraticBezier( a:Object, b:Object, c:Object, t:Number ):Point |
|---|
| | 172 | { |
|---|
| | 173 | var s:Number = 1-t; |
|---|
| | 174 | var nx:Number = s*s*a.x + 2*s*t*b.x + t*t*c.x; |
|---|
| | 175 | var ny:Number = s*s*a.y + 2*s*t*b.y + t*t*c.y; |
|---|
| | 176 | return new Point( nx , ny ); |
|---|
| | 177 | } |
|---|
| | 178 | |
|---|
| | 179 | /** |
|---|
| | 180 | * 3次ベジェ曲線を描くための座標を求めます. |
|---|
| | 181 | * 引数には x, y の数値プロパティを持つオブジェクトを4つと中間点の数を渡す必要があります. |
|---|
| | 182 | * <listing> |
|---|
| | 183 | * import flash.display.Sprite; |
|---|
| | 184 | * import flash.geom.Point; |
|---|
| | 185 | * import com.seyself.math.GeomMath; |
|---|
| | 186 | * |
|---|
| | 187 | * var t:Number = 0; |
|---|
| | 188 | * var a:Point = new Point( 0, 0 ); |
|---|
| | 189 | * var b:Point = new Point( 12, 60 ); |
|---|
| | 190 | * var c:Point = new Point( 80, 20 ); |
|---|
| | 191 | * var d:Point = new Point( 100, 100 ); |
|---|
| | 192 | * |
|---|
| | 193 | * var sprite:Sprite = new Sprite(); |
|---|
| | 194 | * this.addChild( sprite ); |
|---|
| | 195 | * sprite.graphics.lineStyle( 1 , 0 , 1 ); |
|---|
| | 196 | * sprite.graphics.moveTo( a.x , a.y ); |
|---|
| | 197 | * for(t=0;t<=1;t+=0.05){ |
|---|
| | 198 | * var p:Point = GeomMath.cubicBezier( a, b, c, d, t ); |
|---|
| | 199 | * sprite.graphics.lineTo( p.x , p.y ); |
|---|
| | 200 | * trace( p ); |
|---|
| 165 | | * </code> |
|---|
| 166 | | */ |
|---|
| 167 | | public static function quadraticBezierPath( a:Object, b:Object, c:Object, leng:Number ):Array |
|---|
| 168 | | { |
|---|
| 169 | | return QuadraticBezier.getPath( a , b , c , leng ); |
|---|
| 170 | | } |
|---|
| 171 | | |
|---|
| 172 | | /** |
|---|
| 173 | | * 3次ベジェ曲線を描くための座標を求めます。 |
|---|
| 174 | | * 引数には x, y の数値プロパティを持つオブジェクトを4つと中間点の数を渡す必要があります。 |
|---|
| 175 | | * |
|---|
| 176 | | * @param a : Point - 開始点( x, y の数値プロパティを持つオブジェクト ) |
|---|
| 177 | | * @param b : Point - 点 a のアンカー( x, y の数値プロパティを持つオブジェクト ) |
|---|
| 178 | | * @param c : Point - 点 b のアンカー( x, y の数値プロパティを持つオブジェクト ) |
|---|
| 179 | | * @param d : Point - 終了点( x, y の数値プロパティを持つオブジェクト ) |
|---|
| 180 | | * @param leng : Number - 戻り値が持つ座標の数 |
|---|
| 181 | | * @return Array - 曲線の座標 |
|---|
| 182 | | * @usage <code> |
|---|
| 183 | | * import com.seyself.math.GeomMath; |
|---|
| 184 | | * var a = { x:0 , y:0 }; |
|---|
| 185 | | * var b = { x:120 , y:30 }; |
|---|
| 186 | | * var c = { x:60 , y:180 }; |
|---|
| 187 | | * var d = { x:200 , y:200 }; |
|---|
| 188 | | * var leng = 30; |
|---|
| 189 | | * var path = GeomMath.cubicBezierPath( a, b, c, d, leng ); |
|---|
| 190 | | * var bexir = this.createEmptyMovieClip( "bezir" , 0 ); |
|---|
| 191 | | * bexir.lineStyle( 1 , 0 , 100 ); |
|---|
| 192 | | * bexir.moveTo( path[0].x , path[0].y ); |
|---|
| 193 | | * for(var i=1;i<path.length;i++){ |
|---|
| 194 | | * bexir.lineTo( path[i].x , path[i].y ); |
|---|
| 195 | | * } |
|---|
| 196 | | * </code> |
|---|
| 197 | | */ |
|---|
| 198 | | public static function cubicBezierPath( a:Object, b:Object, c:Object, d:Object, leng:Number ):Array |
|---|
| 199 | | { |
|---|
| 200 | | return CubicBezier.getPath( a , b , c , d , leng ); |
|---|
| | 202 | * </listing> |
|---|
| | 203 | * |
|---|
| | 204 | * @param a 開始点( x, y の数値プロパティを持つオブジェクト ) |
|---|
| | 205 | * @param b 点 a のアンカー( x, y の数値プロパティを持つオブジェクト ) |
|---|
| | 206 | * @param c 点 b のアンカー( x, y の数値プロパティを持つオブジェクト ) |
|---|
| | 207 | * @param d 終了点( x, y の数値プロパティを持つオブジェクト ) |
|---|
| | 208 | * @param t 戻り値が持つ座標の数 |
|---|
| | 209 | * @return 曲線の座標 |
|---|
| | 210 | */ |
|---|
| | 211 | public static function cubicBezier( a:Object, b:Object, c:Object, d:Object, t:Number ):Point |
|---|
| | 212 | { |
|---|
| | 213 | var s:Number = 1-t; |
|---|
| | 214 | var nx:Number = s*s*s*a.x + 3*(s*s)*t*b.x + 3*s*(t*t)*c.x + t*t*t*d.x; |
|---|
| | 215 | var ny:Number = s*s*s*a.y + 3*(s*s)*t*b.y + 3*s*(t*t)*c.y + t*t*t*d.y; |
|---|
| | 216 | return new Point( nx , ny ); |
|---|
| | 217 | } |
|---|
| | 218 | |
|---|
| | 219 | public static function toRadian( degrees:Number ) |
|---|
| | 220 | { |
|---|
| | 221 | var r:Number = degrees % 360; |
|---|
| | 222 | if( r<=-180 ) return ( 360+r )/ 180 * Math.PI; |
|---|
| | 223 | if( r > 180 ) return -( 360-r )/ 180 * Math.PI; |
|---|
| | 224 | return r / 180 * Math.PI; |
|---|
| | 225 | } |
|---|
| | 226 | |
|---|
| | 227 | public static function toDegrees( radian:Number ) |
|---|
| | 228 | { |
|---|
| | 229 | var d:Number = ( radian % ( Math.PI*2 ) ) / Math.PI * 180; |
|---|
| | 230 | if( d<0 ) return 360+d; |
|---|
| | 231 | return d; |
|---|