射线和矩形的交点
本帖最后由 鱼cpython学习者 于 2023-3-15 19:30 编辑矩形没有旋转,四条边都和坐标轴平行或者垂直
射线从原点出发
射线与矩形不一定有交点,必须先进行检测
给出矩形左上角的顶点(x, y)和长宽width, height,射线与x轴正半轴的夹角angle,求射线与矩形的交点,并返回离原点最近的那一个点的坐标
目前我的方法是分别检测四条边和射线的交点,求出所有的点后再取和原点距离最近的点
有没有不用每条边都检测一遍的方法?
附加:矩形可以在任何地方,可以跨象限,可以某条边与坐标轴重合;angle的取值范围是0~360
编辑:
似乎有很多人读不懂我的题,我也觉得我的题目有点抽象了
这有个例子:一个子弹从原点射出,击中一堵墙,求子弹击中的那个点的坐标。墙的两条边平行于y轴,两条边平行于x轴 不是很明白你的题目,像下面的图那样吗?{:5_94:} {:5_94:} {:5_94:}
from math import tan, radians
slope = lambda angle: round(tan(radians(angle)), 10)
f = lambda k, x: k * x
g = lambda k, y: y / k
x, y = 1, 6
w, h = 6, 3
angle = 45
top = y
bottom = y - h
left = x
right = x + w
if f(slope(angle), top) >= left and f(slope(angle), top) <= right:
print(f"({int(f(slope(angle), top))}, {top})")
if f(slope(angle), bottom) >= left and f(slope(angle), bottom) <= right:
print(f"({int(f(slope(angle), bottom))}, {bottom})")
if g(slope(angle), left) >= bottom and g(slope(angle), left) <= top:
print(f"({left}, {int(f(slope(angle)), left)})")
if g(slope(angle), right) >= bottom and g(slope(angle), right) <= top:
print(f"({right}, {int(f(slope(angle), right))})")(6, 6)
(3, 3) 顶一顶 鱼cpython学习者 发表于 2023-3-5 21:20
顶一顶
都不知道你的已知条件和预期结果 根本就看不明白 wp231957 发表于 2023-3-6 14:38
都不知道你的已知条件和预期结果 根本就看不明白
这有啥不明白的,已知条件就是平面直角坐标系中的一条射线和一个矩形,预期结果就是射线和矩形边缘的交点,把计算过程封装成一个函数。 我再顶 本帖最后由 歌者文明清理员 于 2023-3-10 22:05 编辑
鱼cpython学习者 发表于 2023-3-9 12:36
我再顶
我不知道,我只知道aa+bb=cc 帮顶
我是歌者文明清理员的小号 顶(使劲读题目ing) 不太理解,看完你的问题,我变相的理解为求满足垂直平行条件矩阵的四顶点中,离原点最近的点。
这大概不是你的本意,但我理解下来得到的就是这样。 曼查克 发表于 2023-3-15 15:30
不太理解,看完你的问题,我变相的理解为求满足垂直平行条件矩阵的四顶点中,离原点最近的点。
这大概不是 ...
确实不是我的本意。你可以这样理解:
一个子弹从原点射出,击中一堵平行垂直的墙,求子弹击中的那个点的坐标。 本帖最后由 歌者文明清理员 于 2023-3-19 07:29 编辑
给个测试条件呗 歌者文明清理员 发表于 2023-3-19 07:28
给个测试条件呗
比如说
x, y = 6, 10
width, height = 10, 10
angle = 45
target = (6, 6) # 正确的结果 鱼cpython学习者 发表于 2023-3-19 09:39
比如说
为什么我得到的结果是(-2,-6)
应该不对 傻眼貓咪 发表于 2023-3-23 15:28
不是很明白你的题目,像下面的图那样吗?
是的,感谢
页:
[1]