記事のディレクトリ
矩形内部の点かどうかを決定します
タイトル
二次元の座標系では、すべての値がdouble型であり、矩形を4点、で表すことができる
最上点に最も左の点(X2、Y2)の(X1、Y1)、(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)
ご質問や提案が、コメント欄や正しい私にメッセージを残してください!
私たちは、あなたが費やす時間と労力に感謝します!