मुझे 3 अंक के बीच कोण की गणना करने की आवश्यकता है। इस के लिए, मैं निम्न कार्य करें:गलत कोण, गलत पक्ष की गणना
- ले लो 3 अंक (पिछले वर्तमान और अगले, यह एक पाश के भीतर है)
- पाइथागोरस
- साथ अंक के बीच दूरी की गणना की गणना कोण
Math.acos
का उपयोग कर
ऐसा लगता है कि 180 डिग्री से अधिक के स्वर्गदूतों के बिना आकार के लिए ठीक काम करता है, हालांकि यदि किसी आकार में ऐसा कोने होता है तो यह छोटी तरफ की गणना करता है। यहाँ दिखाने के लिए मैं क्या मतलब है उदाहरण दिया गया है (लाल मूल्यों गलत हैं):
इस कोड है कि गणना करता है:,
// Pythagoras for calculating distance between two points (2D)
pointDistance = function (p1x, p1y, p2x, p2y) {
return Math.sqrt((p1x - p2x)*(p1x - p2x) + (p1y - p2y)*(p1y - p2y));
};
// Get the distance between the previous, current and next points
// vprev, vcur and vnext are objects that look like this:
// { x:float, y:float, z:float }
lcn = pointDistance(vcur.x, vcur.z, vnext.x, vnext.z);
lnp = pointDistance(vnext.x, vnext.z, vprev.x, vprev.z);
lpc = pointDistance(vprev.x, vprev.z, vcur.x, vcur.z);
// Calculate and print the angle
Math.acos((lcn*lcn + lpc*lpc - lnp*lnp)/(2*lcn*lpc))*180/Math.PI
वहाँ कुछ कोड में गलत है किया मैं कुछ करना भूल जाता हूं, या इसे पूरी तरह अलग तरीके से किया जाना चाहिए?
आप इस्तेमाल कर सकते हैं [ 'Math.atan2()'] (https://developer.mozilla.org/en-US/docs/Web/ जावास्क्रिप्ट/संदर्भ/Global_Objects/Math/atan2) निर्देशांक से कोणों की गणना करने के लिए, यह गणना को सरल बना देगा। आप एक कामकाजी उदाहरण [इस पहेली में] देख सकते हैं (http://jsfiddle.net/92jWG/6/)। – Teemu
त्रिकोण का कोण 180 डिग्री से अधिक कोण कैसे हो सकता है?कोणों का योग 180 डिग्री ..... – Jiminion
समस्या यह है कि 'cos (90) 'और' cos (270) '0 दोनों हैं इसलिए एकोस (0) करते समय इसे चुनना होगा कि आपको क्या और स्पष्ट रूप से देना है वरीयता के रूप में 90 चुनता है। इसे ठीक करने का एक तरीका शायद atan2 का उपयोग करने के लिए Teemu सुझाव देता है और प्रत्येक पंक्ति खंड के कोणों को काम करता है और उन्हें घटाता है। मुझे लगता है कि यदि आप इसे सही क्रम में करते हैं तो आपको पूर्ण जानकारी देनी चाहिए (हालांकि इसे सामान्यीकृत करने की आवश्यकता हो सकती है क्योंकि यह -360 और 360 के बीच हो सकती है)। – Chris