Как проверить, находится ли фигура в фигуре?

Рейтинг: 0Ответов: 2Опубликовано: 14.01.2015

Имеются две сложные фигуры с указанными координатами.

Как проверить находится ли фигура в фигуре?

http://jsfiddle.net/n5d13o1v/

Принцип координат фигур:

alt text

Ответы

▲ 1
  1. Построить за счет точек и отрезков (векторов) параметрические уравнения прямых.
  2. Для любых двух прямых искать точку пересечения, методы есть в гугле. Также есть учебник Воеводина или Куроша по линейной алгебре.

Обновление

Тут еще понадобится операция получения вектора из двух точек, и возможно, придется приводить уравнения к общему виду (ax+by+c=0).

Или вот еще одна форма: http://www.cleverstudents.ru/line_and_plane/line_passes_through_2_points.html

Все эти уравнения друг к другу приводятся.

▲ 1

Может, проще воспользоваться какой-то библиотекой, которая упрощает как и редактирование холста, так и включает в себя дополнительные методы?

Вот смотрите на примере Fabric.js:

var Points1 = [
    {x: 0, y: 42},
    {x: 155, y: 0},
    {x: 155, y: 243},
    {x: 0, y: 256}
];

var Points2 = [
    {x: 0, y: 32},
    {x: 135, y: 0},
    {x: 105, y: 203}
];

var canvas = new fabric.Canvas('container');

var polygon = new fabric.Polygon(Points1, {
    left: 0,
    top: 0,
    fill: 'purple',
    selectable: true
});

var polygon2 = new fabric.Polygon(Points2, {
    left: 0,
    top: 0,
    fill: 'yellow',
    selectable: true
});

canvas.add(polygon, polygon2);

canvas.on({
    'object:moving': onChange,
    'object:scaling': onChange,
    'object:rotating': onChange,
});

function onChange(options) {
    options.target.setCoords();
    canvas.forEachObject(function(obj) {
        if (obj === options.target) return;

        var isIntersecting = options.target.intersectsWithObject(obj) ||
            options.target.isContainedWithinObject(obj) ||
            obj.isContainedWithinObject(options.target);

        obj.setOpacity(isIntersecting ? 0.5 : 1);
    });
}

Пример: http://jsfiddle.net/2v7W2/36/