0

**これはプログラミング コースの一部であり、使用するように求められたモジュールは通常、それ以外では使用されません。私は自分のコードを説明するために最善を尽くします (かなり自明ですが)

編集:興味がある場合は、Myroを使用する必要があります。マウスのクリック座標を取得するために使用するコードは次のとおりです。mouseX, mouseY = win.getMouse() # "win" refers to a Window object

クリックすると何らかのアクションを実行する「ボタン」を作成しています。使用する形状は、長方形、円、三角形の 3 つです。

長方形の場合:

# The numbers used in this example are the coordinates on an XY plane
# mouseX refers to the X coord of a recent mouse click; mouseY on the Y axis
if mouseX >= 70 and mouseX <= 120:
        if mouseY >= 10 and mouseY <= 35:
            print("rectangle button clicked")

サークルについては、この質問から助けを得て、最終的に次のコードになりました。

# mouseX and mouseY, same as rectangle example
if sqrt((mouseX-660)**2 + (mouseY-270)**2) <= 30:
        print("circle button clicked")

私が作業しようとしている最後の形状は三角形です。どのように確保し、形状の座標内にいるのかわかりませmouseXmouseY。私は数学がかなり苦手ですが、使用できる数式があると思います (例: 円の例)。どうもありがとう。

4

3 に答える 3

1

三角形とマウスの座標を次のように定義します。

ここに画像の説明を入力

また、2 つのベクトルとの2D 外積を定義します。uv

ここに画像の説明を入力

ベクトルuが の右側にある場合は正v、左側にある場合は負です。

したがって、探している4 つの条件は次のとおりです。

ここに画像の説明を入力

...マウスヒットの場合。

(内積を使用する別の方法もありますが、平方根を使用するため効率が悪いです)

コードがないことをお詫びします - 私は Python が嫌いです (ええ、そう言いました)。しかし、これは実装に必要な計算を提供するはずです。

于 2015-11-12T13:26:15.617 に答える
0

外積の使用 - すべて正またはすべて負でなければなりません。

def line_point_pos(start, end, point):
    """right: negative, left: positive, onedge: zero"""
    A = end[0]-start[0], end[1]-start[1]
    B = point[0]-start[0], point[1]-start[1]
    # return z-component of cross product
    return A[0]*B[1] - A[1]*B[0]

def in_polygon(vertices, point, onedges=True):
    """find out if the point is inside the polygon"""
    edges = zip(vertices, vertices[1:] + [vertices[0]])

    zs = [line_point_pos(s, e, point) for s,e in edges]
    if 0 in zs:
        return onedges
    return all(z>0 for z in zs) or all(z<0 for z in zs)

triangle = [(1, 1), (10, 1), (5, 10)]
a = 5, 10
print(in_polygon(triangle, a))      # True
于 2015-11-12T13:40:30.327 に答える