SORU
28 EYLÜL 2011, ÇARŞAMBA


Nasıl bir çizgi arasındaki açı ve yatay eksen hesaplamak için?

Bir programlama dili (Python, C#, vb.) bir çizgi arasındaki açı ve yatay eksen hesaplamak için nasıl belirlemeliyim?

Görüntüyü en iyi istediğimi açıklar sanırım

no words can describe this

(P1xP1y) ve (P2xP2ybu açı hesaplamak için en iyi yolu ne? Kökeni topleft ve tek olumlu kadran kullanılır.

CEVAP
28 EYLÜL 2011, ÇARŞAMBA


İlk başlangıç noktası ve bitiş noktası arasındaki farkı bulmak.

deltaY = P2_y - P1_y
deltaX = P2_x - P1_x

Sonra açıyı hesaplamak.

angleInDegrees = arctan(deltaY / deltaX) * 180 / PI

Eğer dil atan2 bir işlev içeriyorsa, aşağıdakileri yerine hale geliyor

angleInDegrees = atan2(deltaY, deltaX) * 180 / PI

Python ile bir uygulama radyan kullanarak (benim cevabım düzenlenmiş olan Eric Leschinski tarafından sağlanır):

from math import *
def angle_trunc(a):
    while a < 0.0:
        a  = pi * 2
    return a

def getAngleBetweenPoints(x_orig, y_orig, x_landmark, y_landmark):
    deltaY = y_landmark - y_orig
    deltaX = x_landmark - x_orig
    return angle_trunc(atan2(deltaY, deltaX))

angle = getAngleBetweenPoints(5, 2, 1,4)
assert angle >= 0, "angle must be >= 0"
angle = getAngleBetweenPoints(1, 1, 2, 1)
assert angle == 0, "expecting angle to be 0"
angle = getAngleBetweenPoints(2, 1, 1, 1)
assert abs(pi - angle) <= 0.01, "expecting angle to be pi, it is: "   str(angle)
angle = getAngleBetweenPoints(2, 1, 2, 3)
assert abs(angle - pi/2) <= 0.01, "expecting angle to be pi/2, it is: "   str(angle)
angle = getAngleBetweenPoints(2, 1, 2, 0)
assert abs(angle - (pi pi/2)) <= 0.01, "expecting angle to be pi pi/2, it is: "   str(angle)
angle = getAngleBetweenPoints(1, 1, 2, 2)
assert abs(angle - (pi/4)) <= 0.01, "expecting angle to be pi/4, it is: "   str(angle)
angle = getAngleBetweenPoints(-1, -1, -2, -2)
assert abs(angle - (pi pi/4)) <= 0.01, "expecting angle to be pi pi/4, it is: "   str(angle)
angle = getAngleBetweenPoints(-1, -1, -1, 2)
assert abs(angle - (pi/2)) <= 0.01, "expecting angle to be pi/2, it is: "   str(angle)

Tüm testleri geçmek. https://en.wikipedia.org/wiki/Unit_circle bkz

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • buttheadgsxr1000

    buttheadgsxr

    24 Ocak 2008
  • Canceriansoul

    Canceriansou

    15 Ocak 2011
  • MrMimoB

    MrMimoB

    11 NİSAN 2011