Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private function getPositiveOrientedAngle(refCell:Point, cellA:Point, cellB:Point) : Number
- {
- switch(this.compareAngles(refCell,cellA,cellB))
- {
- case SAME:
- return 0;
- case OPPOSITE:
- return Math.PI;
- case TRIGONOMETRIC:
- return this.getAngle(refCell,cellA,cellB);
- case COUNTER_TRIGONOMETRIC:
- return 2 * Math.PI - this.getAngle(refCell,cellA,cellB);
- default:
- return 0;
- }
- }
- private function compareAngles(ref:Point, start:Point, end:Point) : int
- {
- var aVec:Point = this.vector(ref,start);
- var bVec:Point = this.vector(ref,end);
- var det:int = this.getDeterminant(aVec,bVec);
- if(det != 0)
- {
- return det > 0?int(TRIGONOMETRIC):int(COUNTER_TRIGONOMETRIC);
- }
- return aVec.x >= 0 == bVec.x >= 0 && aVec.y >= 0 == bVec.y >= 0?int(SAME):int(OPPOSITE);
- }
- private function getAngle(coordRef:Point, coordA:Point, coordB:Point) : Number
- {
- var a:Number = this.getComplexDistance(coordA,coordB);
- var b:Number = this.getComplexDistance(coordRef,coordA);
- var c:Number = this.getComplexDistance(coordRef,coordB);
- return Math.acos((b * b + c * c - a * a) / (2 * b * c));
- }
- private function getComplexDistance(ref_start:Point, ref_end:Point) : Number
- {
- return Math.sqrt(Math.pow(ref_start.x - ref_end.x,2) + Math.pow(ref_start.y - ref_end.y,2));
- }
- private function getDeterminant(aVec:Point, bVec:Point) : int
- {
- return aVec.x * bVec.y - aVec.y * bVec.x;
- }
- private function vector(start:Point, end:Point) : Point
- {
- return new Point(end.x - start.x,end.y - start.y);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement