如何测试圆是否在旋转的物体中

发布于 2024-11-15 08:53:50 字数 98 浏览 4 评论 0原文

我正在使用 Raphaeljs 创建一个用于创建图表的 Web 应用程序。其中一种形状是菱形,它只是一个旋转 45 度的矩形。我需要测试一个圆是否落在旋转图像内,但我不知道该怎么做。

I'm using Raphaeljs to create a web application for creating diagrams. One of the shapes is a diamond, which is just a rectangle rotated 45 degrees. I need to test whether a circle falls within the rotated image, and I'm not sure how to go about it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心不设防 2024-11-22 08:53:50

如果你有一个菱形:

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}

If you have a diamond:

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

Then the two corners on the horizontal with have coordinates (nx1, ny) and (nx2, ny), where

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;

Then you create a diamond inside this one which is smaller by the radius of the circle.

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

Diagram showing circle in diamond

Then you test whether centre of the circle is between the four sides of this diamond:

if (cy < ny - nx1 + cx &&
    cy > ny - nx2 + cx &&
    cy > ny + nx1 - cx &&
    cy < ny + nx2 - cx)
  {Circle is inside the diamond}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文