|
|
|||||
Регистрация: Nov 2010
Сообщений: 430
|
Принадлежит ли точка прямой
Здравствуйте.
Есть задача: у отрезка известны координаты конца и начала (могут быть любыми). Известны координаты некоторой точки. Подскажите, как узнать принадлежит ли точка отрезку?
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь. |
|
|||||
порт с С++
package { import flash.display.Sprite; import flash.geom.Point; /** * ... * @author casey ryan */ public class Main extends Sprite { private const EPSILON:Number = 0.001; public function Main() { } private function isPointOnLine(linePointA:Point, linePointB:Point, point:Point):Boolean { var a:Number = (linePointB.y - linePointA.y) / (linePointB.x - linePointB.x); var b:Number = linePointA.y - a * linePointA.x; if ( Math.abs(point.y - (a * point.x + b)) < EPSILON) { return true; } return false; } } } |
|
|||||
>> но скорее всего сработает
для вертикальной точно не сработает если с анализом нюансов не охота связываться, то можно таким 'шаманским' способом, типа пусть плеер сам и считает ) public function Main():void { trace (isPointOnLine(new Point(0, 0), new Point(100, 100), new Point(52, 50),1));//false trace (isPointOnLine(new Point(0, 0), new Point(100, 100), new Point(52, 50),10));//true trace (isPointOnLine(new Point(0, 0), new Point(100, 100), new Point(50, 50), 0));//true } private function isPointOnLine(linePointA:Point, linePointB:Point, point:Point, tol:Number=0):Boolean { var tmp:Shape = new Shape(); tmp.graphics.lineStyle(tol); tmp.graphics.moveTo(linePointA.x, linePointA.y); tmp.graphics.lineTo(linePointB.x, linePointB.y); addChild(tmp); var res:Boolean = tmp.hitTestPoint(point.x, point.y, true); removeChild(tmp); return res; } |
|
|||||
Если уж пошли шаманские способы, то можно и так:
Только компенсацию погрешности добавить.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
[+1 22.04.13]
[+1 06.03.13] Регистрация: Apr 2012
Сообщений: 239
|
1. составляете матрицу 3-о порядка из координат точек (в 3 столбике 1, т.к. у нас двумерное пространство)
2. находите определитель матрицы (детерминант) 3. сравниваете его с нулем ...... 4. PROFIT |
|
|||||
[+4 08.09.13]
Регистрация: May 2012
Сообщений: 131
|
(y - y1)/(y2 - y1) = (x - x1)/(x2 - x1)
A(x1, y1) - начало отрезка B(x2, y2) - конец отрезка С(x, y) - проверяемая точка подставляем. считаем =) |
Часовой пояс GMT +4, время: 10:30. |
|
« Предыдущая тема | Следующая тема » |
|
|