2012-07-09 15 views
10

Ben math.tan tarafından math.atan tersini alabilirsiniz ben Lua bu kullanmak fonksiyonutersi mi?

math.atan2 

tersi nedir.
Ama burada kayboldum.

DÜZENLEME

Tamam beni daha fazla ayrıntı vereyim.

Ben 2 puan (x1, y1) ve ben açısı varsa, dy ve dx geri almak mümkündür Şimdi
local dy = y1-y2 
    local dx = x1-x2 
    local angle = atan2(dy,dx)* 180/pi 

yaptılar (x2, y2) arasındaki açıyı hesaplamak için gerekli?

x = cos(theta) 
y = sin(theta) 

Basit Google arama bu kustu ve soru soruldu adam bunu çözmüş ki:

cevap

15

Yalnızca açı verildiğinde, yalnızca (dx, dy) işaretli bir birim vektörü oluşturabilirsiniz. Orijinal (dx, dy)'u elde etmek için, len'u arayacağım (dx, dy) vektörünün uzunluğunu da bilmeniz gerekir. Ayrıca derecelerden türetilen açıyı radyanlara dönüştürmeniz ve daha sonra bu gönderinin başka yerlerinde belirtilen trig denklemlerini kullanmanız gerekir.

local dy = y1-y2 
    local dx = x1-x2 
    local angle = atan2(dy,dx) * 180/pi 
    local len = sqrt(dx*dx + dy*dy)

Verilen (derece) angle ve vektör uzunluğu, len, yanından dx ve dy türetebilirsiniz: Seninki olduğunu

local theta = angle * pi/180 
    local dx = len * cos(theta) 
    local dy = len * sin(theta)
+0

Ah Teşekkürler! Şimdi cevap açık görünüyor. Kendimi aptal gibi hissediyorum! MY math, paslı sanırım paslı. Tekrar teşekkürler! :) – SatheeshJM

+0

Lua'da dereceler ve radyanlar arasında dönüşüm yapmak için 'math.deg' ve' math.rad' kullanabilirsiniz. – lhf

+0

@lhf: Teşekkürler. Daha önce hiçbir şey yapmadım, bu yüzden bu yaklaşımın güvenli olacağını düşündüm. – andand

4

Görünüşe göre, böyle bir şey yardımcı olacaktır. this reference göre

+0

Evet bunu da gördüm.X ve y değerlerinin (günah ve cos tarafından hesaplanan) sorduğum soruya göre ne anlama geldiğini biliyor musunuz (soruyu güncelledim)? – SatheeshJM

+0

theta'nın radyan olduğundan emin olun, OP tarafından verilen kod derece dönüştürür. – lhf

0

:

/x (radyan) y yay tanjantını döndürür, ancak sonucun kadranı bulmak için hem parametrelerin işaretleri kullanır. (Aynı zamanda doğru x sıfır olma davasını işler.)

Bu yüzden de onu çevirin math.tan kullanabilirsiniz sanırım.

1

Muhtemelen yanlış sayıları alırsınız eğer kullanın:

local dy = y1-y2 
local dx = x1-x2 
local angle = atan2(dy,dx) * 180/pi 

Eğer y ekran aşağı gidiş büyür ve x alır nerede koordinat sistemi kullanıyorsanız büyük olacak Sağ ardından kullanmak gerekir:

local dy = y1 - y2 
local dx = x2 - x1 
local angle = math.deg(math.atan2(dy, dx)) 
if (angle < 0) then 
    angle = 360 + angle 
end 

Bunu kullanmak istediğiniz sebebi lua atan2 size, o ötesine gerektiği gibi daha sonra 180 çarpana kadar bu doğru olacaktır -180 ile 180 arasında bir sayı verecektir çünkü 180 (yani 187) 360'a yaklaştıkça -180'den 0'a inen bir negatif sayıya dönüştürecektir. Bunu düzeltmek için açının 0'dan küçük olup olmadığını kontrol ediyoruz ve eğer varsa 360'ı ekleyelim. doğru açı.