كيفية حساب (x ، y) لطول قوس ثابت بعيدا عن نقطة على محيط

StackOverflow https://stackoverflow.com/questions/4111045

سؤال

لقد قضيت ساعات طويلة في هذا ، يمكنني أن أشعر أن عقلاني ينزلق ببطء. لذلك أي مساعدة سيكون موضع تقدير حقا. سأحاول أن أكون مستقيمة قدر الإمكان.

لدي دائرة على طائرة ثنائية الأبعاد. أعرف الإحداثيات الديكارتية للنقطة المركزية (C) ونصف القطر (R).

ارتباك ينبع من هذه المشكلة. عندما تزود بنقطة على الطائرة خارج الدائرة ؛ يمكنني حساب النقطة (P) على محيط الدائرة الأقرب إلى تلك النقطة.

ما أريد القيام به هو تحديد الإحداثيات (x ، y) من نقطتين على محيط. دعنا نسميهم p1 و p2. P1 و P2 هما طرفان للقوس. القوس هو طول ثابت (x). P هي نقطة منتصف الطريق بين P1 و P2. على هذا النحو ، فإن طول القوس من P إلى P1 & P إلى P2 كلاهما X/2.

باختصار: إعطاء C ، R ، P ، X ؛ أحتاج إلى حساب P1 و P2.

أحاول ترميز هذا في C ++ ولكن أي اقتراحات أو رمز زائف سيكون رائعًا.

تحرير: X هو طول قوس ، وليس خطًا مستقيمًا بين P1 و P2

هل كانت مفيدة؟

المحلول

على دائرة ، زاوية theta يتوافق مع طول القوس theta * R, ، وهذا يعني أن قوس الخاص بك سوف يفسد زاوية theta = X / R. لذلك إذا ابدأ بنقطةك

P = C + R * (sin(u), cos(u))

ثم اصعد/لأسفل theta/2:

P1 = C + R * (sin(u + theta/2), cos(u + theta/2))

و

P2 = C + R * (sin(u - theta/2), cos(u - theta/2))

نصائح أخرى

القوس الذي يضع زاوية θ (في الراديان) طول قوس θr. لذلك ، تريد نصف زاوية θ = x/(2r). تحتاج بعد ذلك إلى أخذ المتجه (P -C) ، وتدويره بزوايا ± θ ، وإضافة مرة أخرى في C للحصول على P1 و P2. لتدوير المتجه بزاوية ، اضربه بواسطة أ مصفوفة الدوران.

لذلك ، في الرمز الكاذب ، سيبدو هكذا:

θ = X/(2R)
A = 2x2 rotation matrix corresponding to a rotation by θ radians
A' = transpose of A
P1 = C + A * (P - C)
P2 = C - A' * (P - C)

هناك بعض الأشياء التي يمكن أن تساعد. لن أكتب الرمز ولكني أتخيل أن الحل سيستند إلى مثلثات. انصح:

أي نصف قطر هو نفس الطول.

وبالتالي فإن المثلث المرسوم من P1-P1-C هو متساوي الساقين.

أي الظل عمودي على نصف القطر.

سأضغط بشدة لإثبات ذلك هنا والآن ، ولكن إذا قمت بتمديد الخطوط من C إلى P1/P2 إلى الظل الذي يتقاطع مع الدائرة عند c-> P تشكل أيضًا متساوي الساق.

يجب أن يكون من السهل معرفة من هناك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top