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

  • André Frizzo

    André Frizz

    16 Aralık 2006
  • EmperorTigerstar

    EmperorTiger

    14 EYLÜL 2009
  • PUSHER

    PUSHER

    11 HAZİRAN 2014