Как проверить, находится ли круг во вращающемся объекте - PullRequest
2 голосов
/ 13 июня 2011

Я использую Raphaeljs для создания веб-приложения для создания диаграмм.Одной из фигур является ромб, который представляет собой просто прямоугольник, повернутый на 45 градусов.Мне нужно проверить, попадает ли круг в повернутое изображение, и я не уверен, как это сделать.

1 Ответ

2 голосов
/ 20 июня 2011

Если у вас есть ромб:

var diamond = paper.rect(rect_x, rect_y, size, size);
diamond.rotate(45);

Тогда два угла по горизонтали с координатами (nx1, ny) и (nx2, ny), где

ny  = rect_y + rect_w/2;
nx1 = rect_x + rect_w*(1-Math.sqrt(2))/2;
nx2 = rect_x + rect_w*(1+Math.sqrt(2))/2;

Затем вы создаете внутри него ромб, меньший по радиусу круга.

var circle = paper.circle(cx, cy, r);
nx1 += r*Math.sqrt(2);
nx2 -= r*Math.sqrt(2);

Diagram showing circle in diamond

Затем вы проверяете, находится ли центр круга между четырьмя сторонамиэтот бриллиант:

if (cy < ny - nx1 + cx &&
    cy > ny - nx2 + cx &&
    cy > ny + nx1 - cx &&
    cy < ny + nx2 - cx)
  {Circle is inside the diamond}
...