ما هي أفضل طريقة لحساب النقطه الوسطى ثلاثية الأبعاد (أو n-D)؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

كجزء من مشروع في العمل، لا بد لي من حساب النقطه الوسطى لمجموعة من النقاط في الفضاء ثلاثي الأبعاد.الآن أفعل ذلك بطريقة تبدو بسيطة ولكنها ساذجة - عن طريق أخذ متوسط ​​كل مجموعة من النقاط، كما في:

centroid = average(x), average(y), average(z)

أين x, y و z هي صفائف من أرقام الفاصلة العائمة.يبدو أنني أتذكر أن هناك طريقة للحصول على نقطة مركزية أكثر دقة، لكنني لم أجد خوارزمية بسيطة للقيام بذلك.أي شخص لديه أي أفكار أو اقتراحات؟أنا أستخدم بايثون لهذا الغرض، لكن يمكنني تعديل أمثلة من لغات أخرى.

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

المحلول

على عكس العبارة الشائعة هنا، هناك طرق مختلفة لتحديد (وحساب) مركز السحابة النقطية.لقد قمت بالفعل باقتراح الحل الأول والأكثر شيوعًا وسأفعل ذلك لا القول بأن هناك خطأ ما في هذا:

centroid = average(x), average(y), average(z)

"المشكلة" هنا هي أنها "تشوه" النقطة المركزية الخاصة بك اعتمادًا على توزيع نقاطك.على سبيل المثال، إذا افترضت أن جميع النقاط الخاصة بك موجودة داخل صندوق مكعب أو أي شكل هندسي آخر، ولكن معظمها يقع في النصف العلوي، فإن نقطة المركز الخاصة بك سوف تتحرك أيضًا في هذا الاتجاه.

كبديل، يمكنك استخدام الوسط الرياضي (متوسط ​​القيم القصوى) في كل بعد لتجنب ذلك:

middle = middle(x), middle(y), middle(z)

يمكنك استخدام هذا عندما لا تهتم كثيرًا بعدد النقاط، بل تهتم أكثر بالمربع المحيط العام، لأن هذا هو كل ما هو - مركز المربع المحيط حول نقاطك.

وأخيرًا، يمكنك أيضًا استخدام median (العنصر الذي في الوسط) في كل بعد:

median = median(x), median(y), median(z)

الآن هذا سوف يفعل العكس نوعًا ما middle وتساعدك فعليًا على تجاهل القيم المتطرفة في سحابة النقاط الخاصة بك والعثور على نقطة مركزية مرتكز على توزيع النقاط الخاصة بك.

قد تكون الطريقة الأكثر قوة للعثور على نقطة مركزية "جيدة" هي تجاهل أعلى وأسفل 10% في كل بُعد ثم حساب average أو median.كما ترون، يمكنك تحديد النقطة المركزية بطرق مختلفة.أعرض لك أدناه أمثلة على سحابتين نقطيتين ثنائي الأبعاد مع وضع هذه الاقتراحات في الاعتبار.

النقطة الزرقاء الداكنة هي النقطه الوسطى المتوسطة (المتوسطة).يظهر الوسيط باللون الأخضر.والوسط موضح باللون الأحمر.وفي الصورة الثانية سترى بالضبط ما كنت أتحدث عنه سابقًا:النقطة الخضراء هي "أقرب" إلى الجزء الأكثر كثافة في السحابة النقطية، بينما النقطة الحمراء أبعد عنها، مع مراعاة الحدود القصوى للسحابة النقطية.

enter image description here enter image description here

نصائح أخرى

كلا، هذه هي الصيغة الوحيدة للنقطه الوسطى لمجموعة من النقاط.انظر ويكيبيديا: http://en.wikipedia.org/wiki/Centroid

لقد ذكرت بشكل غامض "طريقة للحصول على مركز مركزي أكثر دقة".ربما كنت تتحدث عن النقطه الوسطى التي لا تتأثر بالقيم المتطرفة.على سبيل المثال، متوسط من المحتمل أن يكون دخل الأسرة في الولايات المتحدة مرتفعًا جدًا، وذلك لأن عددًا صغيرًا من جداً الأغنياء يشوهون المتوسط.هم "القيم المتطرفة".ولهذا السبب، يستخدم الإحصائيون الوسيط بدلاً من.إحدى طرق الحصول على الوسيط هي فرز القيم ثم اختيار القيمة في منتصف القائمة.

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

إحدى الطرق هي العثور على هيكل محدب من النقاط.يحتوي الهيكل المحدب على جميع النقاط الموجودة على "الخارج" لمجموعة النقاط.إذا قمت بذلك، وتخلصت من النقاط الموجودة على الهيكل، فسوف تتخلص من القيم المتطرفة، وستعطي النقاط المتبقية مركزًا مركزيًا أكثر "تمثيلًا".ويمكنك تكرار هذه العملية عدة مرات، وستكون النتيجة أشبه بتقشير البصلة.في الواقع، يطلق عليه "تقشير البدن المحدب".

يمكنك استخدام جمع زيادة الدقة - جمع كاهان - هل كان هذا ما يدور في ذهنك؟

من المحتمل أن تكون أكثر كفاءة:إذا كنت تقوم بحساب ذلك عدة مرات، فيمكنك تسريع ذلك قليلاً عن طريق الاحتفاظ بمتغيرين ثابتين

N  # number of points
sums = dict(x=0,y=0,z=0)  # sums of the locations for each point

ثم قم بتغيير N والمبالغ كلما تم إنشاء النقاط أو تدميرها.يؤدي هذا إلى تغيير الأشياء من O(N) إلى O(1) لإجراء العمليات الحسابية على حساب المزيد من العمل في كل مرة يتم فيها إنشاء نقطة أو نقلها أو تدميرها.

أعتقد أن "النقطه الوسطى الأكثر دقة" يتم تعريفها بالطريقة التي حسبتها ومن ثم لا يمكن أن يكون هناك "النقطه الوسطى الأكثر دقة".

نعم هذه هي الصيغة الصحيحة.

إذا كان لديك عدد كبير من النقاط يمكنك استغلال تماثل المشكلة (سواء كانت أسطوانية، كروية، مرآة).بخلاف ذلك، يمكنك الاقتراض من الإحصائيات وحساب متوسط ​​عدد عشوائي من النقاط وسيكون لديك القليل من الخطأ.

لك ذالك.ما تقوم بحسابه هو النقطه الوسطى، أو المتجه المتوسط.

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