2015-12-19 12 views
10

में किसी अन्य बिंदु के बारे में बिंदु घुमाएं यदि आपके पास कोई बिंदु (2 डी में) था, तो आप उस बिंदु को पाइथन में दूसरे बिंदु (मूल) के आसपास डिग्री से कैसे घुमा सकते हैं?डिग्री पायथन

उदाहरण के लिए, आप मूल के चारों ओर पहले बिंदु को 10 डिग्री से झुका सकते हैं।

असल में आपके पास एक बिंदु प्वाइंट ए और मूल है जो यह घूमता है। कोड कुछ इस तरह दिखाई दे सकता है:

PointA=(200,300) 
origin=(100,100) 

NewPointA=rotate(origin,PointA,10) #The rotate function rotates it by 10 degrees 
+2

यह सी ++ में है लेकिन यह वही प्रश्न है https://stackoverflow.com/questions/2259476/rotating-a-point-about-another-point-2d – CoryKramer

+1

कृपया अपना कोड दिखाएं। पायथन में 'पॉइंट' की कोई परिभाषा नहीं है, इसलिए आपको स्पष्टीकरण की आवश्यकता है। – iled

+2

घूर्णन कोड की एक पंक्ति है। लेकिन: 2 डी या 3 डी, आप अपने बिंदु को कैसे परिभाषित करते हैं, आप अपने रोटेशन कोण (3 डी अगर एएसपी) आदि को कैसे परिभाषित करते हैं? यह बहुत सारी बॉयलर प्लेट है जो निश्चित रूप से आपके उपयोग के मामले से मेल नहीं खाती है अगर हम इसे स्क्रैच से लिखते हैं। – tom10

उत्तर

21

निम्नलिखित rotate समारोह कोण angle द्वारा बिंदु point के रोटेशन (वामावर्त रेडियन में) origin चारों ओर, हमेशा की तरह अक्ष सम्मेलनों के साथ प्रदर्शन कार्तीय तल में : एक्स बाएं से दाएं बढ़ रहा है, y लंबवत ऊपर बढ़ रहा है। सभी बिंदुओं को (x_coord, y_coord) रूप के लंबाई -2 टपल्स के रूप में दर्शाया जाता है।

import math 

def rotate(origin, point, angle): 
    """ 
    Rotate a point counterclockwise by a given angle around a given origin. 

    The angle should be given in radians. 
    """ 
    ox, oy = origin 
    px, py = point 

    qx = ox + math.cos(angle) * (px - ox) - math.sin(angle) * (py - oy) 
    qy = oy + math.sin(angle) * (px - ox) + math.cos(angle) * (py - oy) 
    return qx, qy 

अपने कोण डिग्री में निर्दिष्ट किया जाता है, तो आप इसे रेडियंस पहले math.radians उपयोग करने के लिए बदल सकते हैं। घड़ी के घूर्णन के लिए, कोण को नकारें।

उदाहरण: वामावर्त 10 डिग्री के कोण से (2, 2) का एक मूल के आसपास बिंदु (3, 4) घूर्णन:

>>> point = (3, 4) 
>>> origin = (2, 2) 
>>> rotate(origin, point, math.radians(10)) 
(2.6375113976783475, 4.143263683691346) 

नोट वहाँ rotate समारोह में कुछ स्पष्ट दोहराया गणना है कि: math.cos(angle) और math.sin(angle) प्रत्येक दो बार गणना, px - ox और py - oy हैं। यदि आवश्यक हो तो बाहर निकलने के लिए मैं इसे आपके पास छोड़ देता हूं।

+0

यह एक अच्छा समाधान है। यदि आप वाई अक्ष (वाई लंबवत नीचे बढ़ रहे हैं) की दिशा को स्थानांतरित करना चाहते हैं तो इसके साथ क्या बदलेगा? धन्यवाद। – sosukeinu

+0

आपका एकमात्र समाधान है जो मेरे लिए काम करता है और मैं कई दिनों से कोशिश कर रहा हूं। आप ही है वह आदमी – Dantalian

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