
Код 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);
}
}
}