Jul*_*les 4 .net math 2d intersection vector
据丹尼尔说,在他的回答中,没有简单的方法可以修改下面的函数,所以我硬着头皮从头开始。解决方案如下(作为答案)。实际上,请忽略我的回答。参见 Tom Sirgedas 的回答,它要短得多。
我需要修改这里找到的解决方案:根据半径计算从正方形中心到边缘的向量,从矩形中心计算向量,以适用于矩形内的任何点。
这是以前的解决方案,来自链接:
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;
Run Code Online (Sandbox Code Playgroud)
check_x 和 check_y 返回矩形边缘上的点,从中心绘制的线将与该点相交。
我上学有一段时间了,所以我盲目地尝试用我感兴趣的点替换 width/2 和 height/2 。不幸的是,这不起作用。
有任何想法吗?
预计到达时间:
如果线在顶部或左侧与矩形相交,则这种盲目修改总是会返回正确的结果。根据起始点所在的象限,当线与右侧或底部相交时,它返回一个太远或太近的点。
假设矩形由 (x1,y1,x2,y2) 定义,假设光线从 (px,py) 开始。
让 vx = cos(角度)
让 vy = sin(角度)
沿着射线移动距离 t 将带您到达点 (px+t vx, py+t vy)。
沿着射线旅行,
因此,t 有四种可能的解。t 的正确值(四者中)是最小的正值。实际交点在点 (px+t vx, py+t vy)。请注意不要除以零!
| 归档时间: |
|
| 查看次数: |
5374 次 |
| 最近记录: |