92. Геометрия на плоскости. Точка, вектор и прямая линия

Геометрия на плоскости:
  1. Точка, вектор и прямая линия
  2. Полигоны (скоро)

UPDATE: Выложил исходники библиотеки

Представляю ваше вниманию движок FPGeometry, написанных на языке ActionScript, для работы с геометрическими элементами на плоскости. Движок описывает такие фундаментальные понятия как точка, вектор и прямая линия на плоскости, а так же различные базовые алгоритмы для работы с ними.

Что бы увидеть на что способен движок, посмотрите на флешку ниже. Потяните мышкой за точки A,B,C,D и E. Точка E” строится программно как проекция точки E на прямую линию AB. Отрезок C”D” – это проекция отрезка CD на прямую линию AB:

Здесь должна быть флешка. Установите Flash Player

Классы и методы/свойства имеющиеся в движке FPGeometry:

Класс FPGPoint2d.as – точка на плоскости


Закрыть Исходник FPGPoint2d.as


Свойства

  • x:Number
    координата x
  • y:Number
    координата y

Методы

  • update(x:Number, y:Number):void
    Обновить координаты
  • addPoint(point:FPGPoint2d):void
    Сместить точку на указанные координаты
  • multiply(d:Number):void
    Умножить координаты на число
  • clone():FPGPoint2d
    Копия точки


Класс FPGPoint2dMath.as


Закрыть Исходник FPGPoint2dMath.as


Методы

  • static CollinearPoints(p1:FPGPoint2d, p2:FPGPoint2d, p3:FPGPoint2d):Boolean
    Проверка на коллинеарность трех точек. Т.е. лежат ли три точки на одной прямой на плоскости


Класс FPGVector2d.as – вектор на плоскости

Класс FPGVector2d наследуется от класса FPGPoint2d.


Закрыть Исходник FPGVector2d.as


Свойства

  • static const ZERO:FPGVector2d
    Нулевой вектор
  • static const ABSCISSA:FPGVector2d
    Единичный вектор направленный вдоль оси X
  • static const ORDINATE:FPGVector2d
    Единичный вектор направленный вдоль оси Y
  • readonly angle:Number
    Угол поворота вектора на плоскости, в радианах
  • readonly module:Number
    длина вектора на плоскости

Методы

  • normalize():void
    Нормировать вектор
  • rotate(delta:Number):void
    Повернуть вектор на угол “delta”, в радианах
  • clone():FPGPoint2d
    Получить копию вектора


Класс FPGVector2dMath.as


Закрыть Исходник FPGVector2dMath.as


Методы(static)

  • AngleBetween(v1:FPGVector2d, v2:FPGVector2d):Number
    Угол между векторами в радианах
  • Scolar(v1:FPGVector2d, v2:FPGVector2d):Number
    Сколярное произведение двух векторов
  • Orthogonal(v1:FPGVector2d, v2:FPGVector2d):Boolean
    Проверка на ортогональность двух векторов
  • Parallel(v1:FPGVector2d, v2:FPGVector2d):Boolean
    Проверка на параллельность двух векторов
  • Codirectional(v1:FPGVector2d, v2:FPGVector2d):Boolean
    Проверка на сонаправленность двух векторов
  • Opposite(v1:FPGVector2d, v2:FPGVector2d):Boolean
    Проверка на противоположнонаправленность
  • Projection(v1:FPGVector2d, v2:FPGVector2d):FPGVector2d
    Получить проекцию вектора v1 на вектор v2


Класс FPGLine2d.as – прямая линия на плоскости


Закрыть Исходник FPGLine2d.as


Свойства

  • P1:FPGPoint2d
    Первая точка прямой линии
  • P2:FPGPoint2d
    Вторая точка прямой линии
  • readonly A:Number
    Коэффициент уравнения прямой Ax + By + C = 0
  • readonly B:Number
    Коэффициент уравнения прямой Ax + By + C = 0
  • readonly C:Number
    Коэффициент уравнения прямой Ax + By + C = 0
  • readonly length:Number
    Длина отрезка p1-p2
  • readonly normale:FPGVector2d
    Вектор нормали
  • readonly direction:FPGVector2d
    Вектор направления

Методы

  • update(p1:FPGPoint2d, p2:FPGPoint2d):void
    Обновить точки линии
  • clone():FPGLine2d
    Получить копию линии
  • valueFromPoint(point:FPGPoint2d):Number
    Значение уравнения прямой в точке point
  • yFromX(valueX:Number):Number
    Получить координату Y по заданной координате X
  • xFromY(valueY:Number):Number
    Получить координату X по заданной координате Y
  • pointFromTime(t:Number):FPGPoint2d
    Координаты точки по времени от 0 до 1
  • isZero():Boolean
    Линия является одной точкой. Т.е. точки p1 и p2 совпадают


Класс FPGLineMath2d.as


Закрыть Исходник FPGLineMath2d.as


Методы

  • Orthogonal(l1:FPGLine2d, l2:FPGLine2d):Boolean
    Проверка на ортогональность двух линий
  • Parallel(l1:FPGLine2d, l2:FPGLine2d):Boolean
    Проверка на параллельность двух линий
  • Length(l1:FPGLine2d, l2:FPGLine2d):Number
    Получить расстояние между параллельными прямыми
  • LineHeight(line:FPGLine2d, point:FPGPoint2d):FPGLine2d
    Получить уравнение перпендикуляра отпущенного из точки p на прямую line
  • Projection(l1:FPGLine2d, l2:FPGLine2d):FPGLine2d
    Проекция линии l1 на l2
  • CrossingLine(l1:FPGLine2d, l2:FPGLine2d):FPGPoint2d
    Получить точку пересечения прямых. ВНИМАНИЕ! Здесь проверяется точка пересечения бесконечно длинных прямых
  • CrossingPiece(l1:FPGLine2d, l2:FPGLine2d):FPGPoint2d
    Найти точку пересечения отрезков(!)
  • CheckSegmentPoint(line:FPGLine2d, p:FPGPoint2d):Boolean
    Проверить принадлежит ли точка p отрезку p1-p2
  • OrientPoint(line:FPGLine2d, p:FPGPoint2d, viewTest:Boolean=false):String
    Проверить положение точки относительно линии. Возвращается константа из класса OrientLinePoint2d


Класс OrientLinePoint2d.as


Закрыть Исходник OrientLinePoint2d.as


Статичный класс, содержащий константы, показывающие где находится точка относительно прямой линии.
Свойства(static)

  • ABOVE_LINE:String = ‘aboveLine’
    точка лежит НАД линией
  • UNDER_LINE:String = ‘underLine’
    точка лежит ПОД линией
  • INPIECE:String = ‘inpiece’
    точка лежит внутри отрезка
  • INLINE:String = ‘inline’
    точка лежит на линии, но ВНЕ отрезка
  • BELONGS_LEFT:String = ‘belongsLeft’
    точка лежит на левой точке линии
  • BELONGS_RIGHT:String = ‘belongsRight’
    точка лежит на правой точке линии


Элементы FPGPoint2d, FPGVector2d и FPGLine2d наследуются от класса GeomElement2d. При изменении свойств, этим элементы отправляют события GeomElement2dEvent.CHANGE


Закрыть Исходник GeomElement2d.as


Закрыть Исходник GeomElement2dEvent.as


Ссылки:

UPDATE: В статье приведены примеры из устаревшей версии движка. Получить новую версию можно в разделе Библиотеки

Геометрия на плоскости:
  1. Точка, вектор и прямая линия
  2. Полигоны (скоро)

Да прeбудет с вами Flash.
Serious Sam
Эту статью прочитали 1227 раз

Возникли вопросы по статье? Не стесняйтесь спрашивать в комментариях или любым другим способом на странице Контакты .

Присоединяйтесь к нам в социальных сетях: ВКонтакте , Twitter и Facebook
Понравилась статья? Буду благодарен если вы поделитесь ссылкой с друзьями:


Комментарии ВКонтакте:




Комментарии Facebook:




Комментарии WordPress: