gpt4 book ai didi

.net - 根据角度计算从矩形中的点到边缘的向量

转载 作者:行者123 更新时间:2023-12-03 21:00:41 26 4
gpt4 key购买 nike

据丹尼尔说,在他的回答中,没有简单的方法可以修改下面的函数,所以我硬着头皮从头开始。解决方案如下(作为答案)。实际上,请忽略我的回答。参见 Tom Sirgedas 的回答,它要短得多。

我需要修改这里找到的解决方案:Calculate a vector from the center of a square to edge based on radius ,从矩形的中心计算向量,以适用于矩形内的任何点。

这是以前的解决方案,来自链接:

    double magnitude;
double abs_cos_angle= fabs(cos(angle));
double abs_sin_angle= fabs(sin(angle));
if (width/2*abs_sin_angle <= height/2*abs_cos_angle)
{
magnitude= width/2/abs_cos_angle;
}
else
{
magnitude= height/2/abs_sin_angle;
}

double check_x= x + cos(angle)*magnitude;
double check_y= y + sin(angle)*magnitude;

check_x 和 check_y 返回矩形边缘上的点,从中心绘制的线将与该点相交。

我上学有一段时间了,所以我盲目地尝试用我感兴趣的点替换 width/2 和 height/2 。不幸的是,这不起作用。

有任何想法吗?

预计到达时间:

如果线在顶部或左侧与矩形相交,则这种盲目修改总是会返回正确的结果。根据起始点所在的象限,当线与右侧或底部相交时,它返回一个太远或太近的点。

最佳答案

假设矩形由 (x1,y1,x2,y2) 定义,假设光线从 (px,py) 开始。

让 vx = cos(角度)

让 vy = sin(角度)

沿着射线移动距离 t 将带您到达点 (px+tvx, py+tvy)。

沿着射线旅行,

  • 当 px+t*vx = x1 或 t=(x1-px)/vx
  • 时,我们撞到了左墙
  • 当 px+t*vx = x2 或 t=(x2-px)/vx
  • 时,我们撞到了右边的墙
  • 当 py+t*vy = y1 或 t=(y1-py)/vy
  • 时,我们撞到了顶墙
  • 当 py+t*vy = y2 或 t=(y2-py)/vy
  • 时,我们撞到了底墙

    因此,t 有四种可能的解。 t 的正确值(四者中)是最小的正值。实际的交点在 (px+tvx, py+tvy) 点。请注意不要除以零!

    关于.net - 根据角度计算从矩形中的点到边缘的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3180000/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com