Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Принадлежит ли точка прямой (http://www.flasher.ru/forum/showthread.php?t=185549)

Srednas 15.10.2012 08:14

Принадлежит ли точка прямой
 
Здравствуйте.

Есть задача: у отрезка известны координаты конца и начала (могут быть любыми). Известны координаты некоторой точки.
Подскажите, как узнать принадлежит ли точка отрезку?

caseyryan 15.10.2012 09:01

порт с С++
Код AS3:

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;
                }
        }
}

не проверял, но скорее всего сработает

silin 15.10.2012 10:47

>> но скорее всего сработает
для вертикальной точно не сработает

если с анализом нюансов не охота связываться, то можно таким 'шаманским' способом, типа пусть плеер сам и считает )
Код AS3:

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;
 
}


alatar 15.10.2012 14:10

Если уж пошли шаманские способы, то можно и так:
Код AS3:

private function isPointOnLine(a:Point, b:Point, c:Point):Boolean
{
    var distance:Number = Point.distance(a, c);
    var line:Point = b.substract(a);
    line.normalize(distance);
 
    return c.equals(line.add(a));
}

Только компенсацию погрешности добавить.

gagaga 15.10.2012 17:22

1. составляете матрицу 3-о порядка из координат точек (в 3 столбике 1, т.к. у нас двумерное пространство)
2. находите определитель матрицы (детерминант)
3. сравниваете его с нулем
......
4. PROFIT

Frost47rus 15.10.2012 22:14

(y - y1)/(y2 - y1) = (x - x1)/(x2 - x1)

A(x1, y1) - начало отрезка
B(x2, y2) - конец отрезка
С(x, y) - проверяемая точка

подставляем. считаем =)

-De- 16.10.2012 01:45

Цитата:

Сообщение от Srednas (Сообщение 1099927)
как узнать принадлежит ли точка отрезку?

Вот это вот в гугол вбить.


Часовой пояс GMT +4, время: 01:23.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.