判断一个点是否在矩形内部
程序员文章站
2022-03-11 16:16:13
...
文章目录
判断一个点是否在矩形内部
题目
在二维坐标系中,所有的值都是double类型,那么一个矩形可以由4个点来代表,
(x1,y1)为最左的点、(x2,y2)为最上的点、(x3,y3)为最下的点、(x4, y4)为最右的点。
给定4个点代表的矩形,再给定一个点(x,y),判断(x,y)是否在矩形中。
算法思路
我第一反应想到的转换为是否在多条直线范围内,也可以扩展至判断多边形。
两点可代表一条直线,可以求出直线方程式
也可以使用叉积,判断点在线的侧方位。具体见判断一个点是否在三角形内 方法二向量法。
针对矩形,有更简洁的想法。
首先,对于边平行于坐标轴的矩形,极易判断。
通过旋转坐标轴,使一般矩形变成边平行于坐标轴的矩形,当然点的坐标会发生相应改变。
注意:
按顺时针点的位置依次为1,2,4,3
Python3代码
# 判断特殊矩形:矩形的边平行于坐标轴
def isInParRect(x1, y1, x4, y4, x, y):
if x <= x1:
return False
if x >= x4:
return False
if y >= y1:
return False
if y <= y4:
return False
return True
# 判断一个点是否在矩阵内
# 旋转坐标系,使一般矩形变成边平行于坐标轴的矩形
def isInRect(x1, y1, x2, y2, x3, y3, x4, y4, x, y):
# 使一般矩形旋转,使之平行于坐标轴
if x1 != x4:
# 坐标系以(x3, y3)为中心,逆时针旋转t至(x4, y4)
dx = x4 - x3
dy = y4 - y3
ds = (dx**2 + dy**2)**0.5
cost = dx / ds
sint = dy / ds
# python特性:隐含临时变量存储值
x, y = cost * x + sint * y, -sint * x + cost * y
x1, y1 = cost * x1 + sint * y1, -sint * x1 + cost * y1
x4, y4 = cost * x4 + sint * y4, -sint * x4 + cost * y4
return isInParRect(x1, y1, x4, y4, x, y)
有任何疑问和建议,欢迎在评论区留言和指正!
感谢您所花费的时间与精力!
上一篇: 3d游戏建模在培训班里要学习多久?
下一篇: 字符串的统计字符串
推荐阅读
-
如何判断一个字符串在JavaScript中是否包含某个字符?
-
C#实现判断一个时间点是否位于给定时间区间的方法
-
C#实现判断一个时间点是否位于给定时间区间的方法
-
如何判断一个元素在亿级数据中是否存在?
-
Shell脚本实现判断IP地址是否在一个ip段内代码分享
-
这四点判断一个男人是否值得结婚
-
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
-
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
-
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
-
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。