2014-09-27 6 views
9

मैं एक निश्चित मुद्दा यह है कि दिए गए दो अंक एक लाइन द्वारा साथ जुड़ा हुआ है के साथ, दो अंक के बीच डिग्री में कोण की गणना करने की जरूरत है।दो अंक के बीच गिना जा रहा है कोण - जावा

enter image description here

यहाँ मैं अब तक की कोशिश की है है:

यहाँ दिखाता है कि मैं क्या जरूरत है एक छवि है

public static float GetAngleOfLineBetweenTwoPoints(float x1, float x2, float y1, float y2) { 
     float xDiff = x2 - x1; 
     float yDiff = y2 - y1; 
     return (float) (Math.atan2(yDiff, xDiff) * (180/Math.PI)); 
} 

यह कहना है कि यह प्रदान नहीं करता है व्यर्थ है सही उत्तर।

+0

तुम भी "मूल" बिंदु के निर्देशांक वर्तमान में, सही नहीं मानते? – qqilihq

+2

आपका निश्चित बिंदु क्या है? आपको उस बिंदु की भी आवश्यकता है –

+0

तीसरा बिंदु जोड़ें (जैसा कि @getlost उल्लेख किया गया है) और वेक्टर कोण सूत्र का उपयोग करें: http://www.vitutor.com/geometry/vec/angle_vectors.html – maskacovnik

उत्तर

13

आप निम्न विधि कि Math.atan2 पद्धति का उपयोग करके रेडियन में कोण की गणना करता है हो सकता है:

public static double angleBetweenTwoPointsWithFixedPoint(double point1X, double point1Y, 
     double point2X, double point2Y, 
     double fixedX, double fixedY) { 

    double angle1 = Math.atan2(point1Y - fixedY, point1X - fixedX); 
    double angle2 = Math.atan2(point2Y - fixedY, point2X - fixedX); 

    return angle1 - angle2; 
} 

और तीन अंक से कॉल करने की (Math.toDregrees का उपयोग कर रेडियन को अंश में से कोण जिसके परिणामस्वरूप को बदलने के लिए):

System.out.println(Math.toDegrees(
      angleBetweenTwoPointsWithFixedPoint(0, 0, // point 1's x and y 
               1, 1, // point 2 
               1, 0 // fixed point 
               ))); 

आउटपुट: 90.0

जावा के मानक Point याउपयोग करने के लिए स्वतंत्र महसूस हालांकि आपके समाधान मेंकक्षाएं। यह सिर्फ यह प्रदर्शित करने के लिए था कि यह काम करता है।

6

यहाँ मेरी एंड्रॉयड इशारा पुस्तकालय से एक कोड का टुकड़ा है। यह काम करता है और पूरी तरह से परीक्षण किया जाता है।

public double getAngleFromPoint(Point firstPoint, Point secondPoint) { 

    if((secondPoint.x > firstPoint.x)) {//above 0 to 180 degrees 

     return (Math.atan2((secondPoint.x - firstPoint.x), (firstPoint.y - secondPoint.y)) * 180/Math.PI); 

    } 
    else if((secondPoint.x < firstPoint.x)) {//above 180 degrees to 360/0 

     return 360 - (Math.atan2((firstPoint.x - secondPoint.x), (firstPoint.y - secondPoint.y)) * 180/Math.PI); 

    }//End if((secondPoint.x > firstPoint.x) && (secondPoint.y <= firstPoint.y)) 

    return Math.atan2(0 ,0); 

}//End public float getAngleFromPoint(Point firstPoint, Point secondPoint) 
+0

आदमी, यह वास्तव में है स्टैक ओवरफ़्लो में मुझे केवल वैध उत्तर मिला। अन्य सभी काम नहीं कर रहे हैं! आपका बहुत बहुत धन्यवाद! – DccBr

+0

मैं 'x' का मान कैसे प्राप्त कर सकता हूं –

1

मुझे @ user2288580 नहीं पता है, लेकिन सरल, परीक्षण-मामलों के लिए भी आपका कोड विफल हो रहा है।

firstPoint = (0,0) secondPoint = (0, 5), (5,5), (5,0), (5, -5) (0, -5) (-5, -5), (-5, 0)

कृपया देखें अगर यह आप @ दाऊद के लिए काम करता है -

public double angleBetween2CartesianPoints(double firstX, double firstY, double secondX, double secondY) { 
    double angle = Math.atan2((secondX - firstX), (secondY - firstY)) * 180/Math.PI; 
    if (angle < 0) { 
     return (360 + angle); 
    } else { 
     return (angle); 
    } 
} 
संबंधित मुद्दे