Показать сообщение отдельно
Старый 16.02.2010, 12:28
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 8  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Код AS3:
package {
	import flash.display.BitmapData;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Point;
 
	/**
	 * ...
	 * @author Mikhail Klabukov
	 */
	public class Main extends Sprite {
 
		private var shape:Shape = new Shape();
 
		public function Main():void {
			if (stage)
				init();
			else
				addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void {
 
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			shape.graphics.beginFill(0xFFCC00);
			shape.graphics.drawEllipse(200, 200, 100, 250);
			shape.graphics.endFill()
			addChild(shape);
 
			var startLine:Point = new Point(100, 100);
			var endLine:Point = new Point(500, 550);
 
			drawLine(startLine, endLine, 0x0000FF);
 
			checkIntersection(startLine, endLine);
		}
 
		private function checkIntersection(start:Point, end:Point):void {
 
			var bd:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0);
			bd.draw(shape)
			var distance:uint = Point.distance(start, end);
			end.offset(-start.x, -start.y);
			var angle:Number = Math.atan2(end.y, end.x);
			var arr:Array = [];
			while (distance--){
				var pnt:Point = Point.polar(distance, angle);
				pnt.offset(start.x, start.y);
				var col:uint = bd.getPixel(pnt.x, pnt.y);
				if (col){
					//trace("ПересечениеXY:",uint(pnt.x),uint(pnt.y))
					arr.push(pnt);
				}
			}
			if (arr.length){
				drawLine(arr[0], arr[arr.length - 1]);
 
				trace("Пересечение:", arr[arr.length - 1], arr[0])
				trace("Длина пересечения:", uint(Point.distance(arr[0], arr[arr.length - 1])) + "px")
			}
		}
 
		private function drawLine(start:Point, end:Point, color:Number = 0xff0000):void {
			var line:Shape = new Shape()
			line.graphics.lineStyle(2, color);
			line.graphics.moveTo(start.x, start.y);
			line.graphics.lineTo(end.x, end.y);
			line.graphics.endFill();
			addChild(line);
		}
	}
}