|
10鱼币
本帖最后由 鱼cpython学习者 于 2023-3-15 19:30 编辑
矩形没有旋转,四条边都和坐标轴平行或者垂直
射线从原点出发
射线与矩形不一定有交点,必须先进行检测
给出矩形左上角的顶点(x, y)和长宽width, height,射线与x轴正半轴的夹角angle,求射线与矩形的交点,并返回离原点最近的那一个点的坐标
目前我的方法是分别检测四条边和射线的交点,求出所有的点后再取和原点距离最近的点
有没有不用每条边都检测一遍的方法?
附加:矩形可以在任何地方,可以跨象限,可以某条边与坐标轴重合;angle的取值范围是0~360
编辑:
似乎有很多人读不懂我的题,我也觉得我的题目有点抽象了
这有个例子:一个子弹从原点射出,击中一堵墙,求子弹击中的那个点的坐标。墙的两条边平行于y轴,两条边平行于x轴
不是很明白你的题目,像下面的图那样吗?
- 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))})")
复制代码
|
|