2012-07-09 15 views
10

समारोहmath.atan2 के विपरीत?

math.atan2 

मैं lua में इस का उपयोग जहाँ मैं math.tan द्वारा math.atan का प्रतिलोम प्राप्त कर सकते हैं का उल्टा क्या है।
लेकिन मैं यहां खो गया हूं।

संपादित

ठीक मुझे और अधिक जानकारी दे सकते हैं।

मैं 2 अंक (x1, y1) और (x2, y2) मैं

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

किया अब अगर मैं कोण है, इसे वापस डीवाई और dx पाने के लिए संभव है के बीच कोण की गणना करने के लिए आवश्यक?

उत्तर

15

केवल कोण को देखते हुए आप केवल एक इकाई वेक्टर प्राप्त कर सकते हैं जो (dx, dy) पर इंगित करता है। मूल (dx, dy) प्राप्त करने के लिए आपको वेक्टर (dx, dy) की लंबाई भी जाननी होगी, जिसे मैं len पर कॉल करूंगा। आपको कोण से वापस कोण को रेडियंस में कनवर्ट करना होगा और फिर इस पोस्ट में कहीं और बताए गए ट्रिग समीकरणों का उपयोग करना होगा।

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

को देखते हुए angle (डिग्री में) और वेक्टर लंबाई, len, आप dx और dy द्वारा निकाले जाते हैं कर सकते हैं:: यह आपके पास है

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

आह धन्यवाद! अब जवाब स्पष्ट लगता है। मुझे एक बेवकूफ की तरह महसूस हो रहा है! मेरा गणित मुझे लगता है कि जंगली है। फिर से धन्यवाद! :) – SatheeshJM

+0

लुआ में आप डिग्री और रेडियंस के बीच कनवर्ट करने के लिए 'math.deg' और' math.rad' का उपयोग कर सकते हैं। – lhf

+0

@ एलएचएफ: धन्यवाद। मैंने लुआ में कभी भी कुछ नहीं किया है, इसलिए मैंने सोचा कि यह दृष्टिकोण सुरक्षित होगा। – andand

4

जाहिर है, कुछ इस तरह मदद मिलेगी:

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

सरल गूगल खोज इस फेंक दिया है, और पुरुष जो प्रश्न पूछा ने कहा कि यह इसे हल।

+0

हाँ मैंने उसे भी देखा।क्या आप जानते हैं कि एक्स और वाई मान (पाप और कॉस द्वारा गणना) मेरे प्रश्न के संबंध में इंगित करता है (मैंने प्रश्न अपडेट किया है)? – SatheeshJM

+0

सुनिश्चित करें कि 'theta' रेडियंस में है, ओपी द्वारा दिया गया कोड डिग्री में परिवर्तित हो जाता है। – lhf

0

this reference अनुसार:

y/एक्स (रेडियन में) के चाप स्पर्शज्या देता है, लेकिन परिणाम के वृत्त का चतुर्थ भाग को खोजने के लिए दोनों मापदंडों के संकेत का उपयोग करता है। (यह भी सही ढंग से किया जा रहा है एक्स शून्य के मामले संभालती है।)

तो मुझे लगता है कि आप math.tan उपयोग कर सकते हैं यह भी उलटने के लिए।

1

आप शायद गलत नंबर मिल जाएगा अगर आप उपयोग:

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

यदि आप समन्वय प्रणाली का उपयोग कर रहे हैं जहां वाई स्क्रीन पर बड़ा हो रहा है और एक्स बड़ा हो जाता है सही तो आप का उपयोग करना चाहिए:

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

कारण आप इस का उपयोग करना चाहते है, क्योंकि lua में atan2 आप जब तक आप 180 तो हिट के रूप में यह परे जाना चाहिए यह सही हो जाएगा -180 और 180 के बीच की एक संख्या दे देंगे 180 (यानी 187) यह 360 के करीब पहुंचने के बाद -180 से 0 तक नीचे जाने वाली ऋणात्मक संख्या में बदल जाएगा। इसके लिए सही करने के लिए हम यह देखने के लिए जांचें कि कोण 0 से कम है या नहीं और यदि हम हमें 360 देने के लिए जोड़ते हैं सही कोण

संबंधित मुद्दे