私はPythonを使って2次元でlookAt関数を作成しようとしているので、今ここに私のコードがあります。2次元でLookAtのような関数を計算する
from math import *
def lookAt(segment, originPoint):
segmentCenterPoint = getSegmentCenter(segment)
for i in range(2):
vtx = getVertex(segment, i)
x, y = getVertexCoord(vtx)
# Calculate the rotation angle already applied on the polygon
offsetAngle = atan2(y - segmentCenterPoint.y, x - segmentCenterPoint.x)
# Calculate the rotation angle to orient the polygon to an origin point
orientAngle = atan2(segmentCenterPoint.y - originPoint.y, segmentCenterPoint.x - originPoint.x)
# Get the final angle
finalAngle = orientAngle - (pi/2)
if offsetAngle >= pi:
offsetAngle -= pi
elif offsetAngle < 0:
offsetAngle += pi
finalAngle += offsetAngle
# Temporary move the point to have its rotation pivot to (0,0)
tempX = x - segmentCenterPoint.x
tempY = y - segmentCenterPoint.y
# Calculate coords of the point with the rotation applied
s = sin(finalAngle)
c = cos(finalAngle)
newX = tempX * c - tempY * s
newY = tempX * s + tempY * c
# Move the point to the initial pivot
x = newX + segmentCenterPoint.x
y = newY + segmentCenterPoint.y
# Apply new coords to the vertex
setVertexCoord(vtx, x, y)
I手動でいくつかの例を試し、よく働いたが、私は、セグメントの数千に関数を適用しようとしたとき、いくつかのセグメントが十分に配向していないと思われます。
私はおそらく何かを逃したが、私はそれが何であるか分からない。また、それを高速に計算する方法がありますか?
ありがとうございました。ここで
EDIT
は、よりよいルックアットの目標を理解するための視覚化したものです。 目標は、A、B座標を見つけることです。すでにO、A、Bを知っていると仮定します。 ([AB]は、我々は点Oに垂直に配向させることが必要セグメントである)
お得ですか?これらの操作の目標を記述できますか? offsetAngleを使った計算は奇妙に見えます。 – MBo
私は何を見つける必要があるかを理解するために写真を追加しました。コメントありがとうございました。 – mickaelb91
はい、すべては現在明らかです。 – MBo