شبكة ثلاثية الأبعاد تتكيف مع البيانات غير المستطيلة في gnuplot

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

  •  12-12-2019
  •  | 
  •  

سؤال

أرغب في رسم النقاط في مخطط ثلاثي الأبعاد وإنشاء شبكة يمكنها التعامل مع البيانات غير المستطيلة.لكي أكون أكثر تحديدًا، فإن بياناتي هي

data.dat

-1 0 0
-1 1 0
0 -1 0
0 0 0
0 1 0
1 -1 0
1 0 0

وملف gnuplot الخاص بي

مؤامرة.plt

set dgrid3d 3,3
splot 'data.dat' w l
pause -1

للأسف dgrid3d يبدو أنه يجعل بياناتي مستطيلة ويتم رسم شبكة مستطيلة (في الواقع شبكة مربعة).هل هناك طريقة لرسم مظروف مقيد لبياناتي؟من الناحية المثالية أود أن أرسم بدن محدب متعامد من مجموعتي من النقاط

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

المحلول

لديك بعض الخيارات للقيام بشيء مثل هذا - لسوء الحظ، تتطلب جميعها بعض العمل من جانبك.

أولا، من المهم أن نلاحظ ذلك يمكن لـ gnuplot التعامل مع الشبكات غير المستطيلة لتخطيط السطح (على الرغم من أنك تحتاج فقط إلى سطح مستطيل في هذا المثال).بالنسبة للتخطيط السطحي، يبدو ملف البيانات كما يلي (لاحظ السجلات الفارغة):

x11 y11 z11
x21 y21 z21
x31 y31 z31
...

x12 y12 z12
x22 y22 z22
x23 y23 z23
...

ومن ثم يشكل الرباعيات.في هذه الحالة سيتكون الشكل الرباعي الأول من النقاط (x11,y11),(x21,y21),(x12,y12),(x22,y22).سيتم تشكيل الشكل الرباعي الثاني من (x21,y21),(x31,y31),(x22,y22),(x23,y23) وهكذا.لذا، نظرًا لمجموعة النقاط الخاصة بك، يمكنك بسهولة إنشاء "شبكة مستطيلة" والتي ستحتوي على جميع نقاط البيانات الخاصة بك.لن تكون متباعدة بشكل متساوٍ، لكن هذه ليست مشكلة على الإطلاق.نحتاج الآن إلى معرفة كيفية إزالة النقاط حتى لا يقوم gnuplot بتخطيطها.هذه هي "الخدعة".يمكنك وضع علامة على سلسلة معينة على أنها "بيانات مفقودة" في ملف البيانات (set datafile missing "string").في هذه الحالة، لن يرسم gnuplot هذه النقطة، لكنه سيستمر في تتبع إحداثيات البيانات المفقودة من أجل إنشاء السطح.

لذا، في نهاية اليوم، سيبدو ملف البيانات الخاص بك كما يلي:

x11 y11 ?
x21 y21 ?
x31 y31 z31
...

x12 y12 ?
x22 y22 z22
x23 y23 z23
...

وسيكون البرنامج النصي لرسمه هو:

set datafile missing '?'
set surf
set view map #Not sure about this...depends on the view you want
splot "mydata.dat" u 1:2:3 w lines

إذا كنت تريد gnuplot لحساب "البدن المحدب المتعامد" ، فأعتقد أنك لم يحالفك الحظ هناك.

الطريق السهل

لاحظ أيضًا أنه إذا كنت تريد كائنًا ملونًا خالصًا في مساحة ثنائية الأبعاد (مثل الصورة الموجودة على رابط ويكيبيديا الذي نشرته)، تصبح هذه المشكلة أسهل بكثير.إذا كان بإمكانك إنشاء ملف بيانات يحتوي فقط على رؤوس الكائن الذي تريد رسمه (بحيث يتصل (x1,y1) بـ (x2,y2) ويتصل بـ (x3,y3)...)، فيمكنك الرسم ملف البيانات هذا على النحو التالي:

set fillstyle #However you want the object to appear
plot "datafile.dat" u 1:2 with filledcurves closed
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top