أكثر

كيفية تعيين قمة الرأس Z الخاصة بميزة التقاطع Z؟


في ArcGIS كيف يمكنني تعيين قيم Z لجزء من الخط الذي يتقاطع مع خط آخر مع قيم Z من السطر الآخر؟ يفضل إجراء عملية دفعية.

لقد جربت FeatureToLine ، لكن القيم الخالية للسطر A (الأزرق) تظل فارغة.

[تحديث] الخط الأحمر هو المصدر وله Z ثابت ، على الرغم من أنه في النهاية لا يوجد سبب لكونه ثابتًا. الخط الأزرق هو متغير Z ، الهدف ، الخط ذو الرؤوس التي نريد تغييرها ، بينما الخط الأحمر يجب أن يكون للقراءة فقط ولا يتغير بالعملية.

(الماس فقط للإشارة إلى مكان القمم.)


يمكنك استخدام أداة الدمج لإدراج رأس عند تقاطع الخطين. فقط تأكد من أن مجموعة البيانات الكنتورية الخاصة بك بها رتبة أقل وأن مجموعات بيانات الخط الأزرق لديك على علم بـ Z. لا تحترم أداة التكامل قيمة Z (لقد تحققت من ذلك في بعض بيانات العينة) ، لذا ستحتاج بعد ذلك إلى تحديث خاصية Z للرأس المُدرج. الآن في هذه المرحلة ، لست على دراية بأي أداة معالجة جغرافية حالية يمكن أن تأخذ قيمة ارتفاع في مجال واستخدم ذلك لتحديث خاصية Z للرأس ...

أظن أنك بحاجة إلى استخدام بعض عناصر ArcObjects لتحقيق هذه الخطوة التالية. تمت مناقشة بعض التعليمات البرمجية هنا.


نقل Z Vertex من جدول السمات في ArcGIS أظهر هذا الفيديو قيمة Z-Vertex ذات الاتجاهين المنقولة من قيمة السمات


تحرير الميزات التي لها قيم z

تمثل القيمة z نموذجيًا الارتفاعات أو الارتفاعات ويمكن استخدامها لعرض المعالم في ثلاثة أبعاد. يمكن لكل رأس من المعلم تخزين قيمة z مع معلومات الموضع x و y. بينما يكون ArcMap وبيئة التحرير الخاصة به ثنائي الأبعاد ، إلا أنهما يوفران القدرة على إدخال قيم z وتحريرها والحفاظ عليها.

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

يمكنك عرض أو تغيير قيم z للمعلم في نافذة تحرير خصائص الرسم. يتم سرد قيم- z في العمود Z. لتغيير قيم z للرؤوس المتعددة ، حدد المربعات الموجودة على يسار القمم التي تريد تحديثها ، ثم انقر فوق الزر Z واكتب القيم الجديدة.

لتخزين قيم z في معلم ، يجب أن تحدد أن فئة المعلم لها قيم z عند إنشائها. هذا يجعل فئة الميزة مدركًا لها. لتحديد ما إذا كانت فئة المعلم مدركًا للعيان ، افتح خصائصها في ArcCatalog أو نافذة الكتالوج ، انقر فوق علامة التبويب عام ، ثم ابحث ضمن Geometry Properties للتحقق بجوار الإحداثيات التي تتضمن قيم Z. يوجد أيضًا حرف Z في حقل الشكل في جدول البيانات في ArcMap ، كما هو الحال في Polyline Z.

يشير الاختيار الموجود بجوار الإحداثيات التي تتضمن قيم Z إلى أن فئة المعلم مدركة لـ z ويمكنها تخزين قيم z.

إذا لم تكن فئة المعالم الحالية لديك مدركة لـ z ، فأنت بحاجة إلى إنشاء فئة معلم جديدة قادرة على تخزين قيم z ، ثم تحميل أو نسخ ولصق الميزات من فئة المعالم الموجودة في الفئة الجديدة وتحرير قيم z. لا تحتاج إلى ترخيص ملحق ArcGIS 3D Analyst لإنشاء فئات معالم z-الإدراك أو تحرير قيم z في ArcMap. ومع ذلك ، إذا كان لديك محلل ثلاثي الأبعاد ، فيمكنك أيضًا تحرير المعالم في ArcGlobe أو ArcScene.

تصف الأقسام التالية السلوك عند تحرير المعالم في ArcMap.


بناء الجملة

فئة معلم النقطة ثلاثية الأبعاد أو متعددة النقاط أو متعددة الخطوط أو المضلع التي سيتم تصديرها إلى ملف ASCII.

المجلد الذي ستتم الكتابة إليه الملفات الناتجة.

اسم ملف ASCII الناتج.

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

تنسيق ملف ASCII الجاري إنشاؤه.

  • عام - يكتب الإخراج بتنسيق عام. هذا هو الافتراضي.
  • XYZ - يكتب معلومات XYZ عن ميزات الإدخال. سيتم إنشاء ملف واحد لكل سطر أو مضلع في معلم الإدخال.
  • الملف الشخصي - يكتب معلومات ملف التعريف لميزات الخط التي يمكن استخدامها في تطبيقات الرسوم البيانية الخارجية.

يستخدم المحدد للإشارة إلى فصل الإدخالات في أعمدة جدول الملف النصي.

  • المسافة - سيتم استخدام مسافة لتحديد قيم الحقل. هذا هو الافتراضي.
  • COMMA - سيتم استخدام فاصلة لتحديد قيم الحقل. لا ينطبق هذا الخيار إذا كان الفاصل العشري عبارة عن فاصلة أيضًا.

الطريقة المستخدمة لتحديد عدد الأرقام المهمة المخزنة في ملفات الإخراج.

  • تلقائي - يتم تحديد عدد الأرقام المعنوية اللازمة للحفاظ على الدقة المتاحة ، أثناء إزالة الأصفار اللاحقة غير الضرورية تلقائيًا. هذا هو الافتراضي.
  • تم الإصلاح - يتم تحديد عدد الأرقام المهمة في معلمة الأرقام بعد العلامة العشرية.

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

يستخدم الحرف العشري للتمييز بين العدد الصحيح للجزء الكسري.

  • DECIMAL_POINT —يتم استخدام النقطة كرمز عشري. هذا هو الافتراضي.
  • DECIMAL_COMMA —يتم استخدام الفاصلة كرمز عشري.

2 إجابات 2

نعم ، هذا ممكن مع برنامج OpenGL. أفعل أسلوبًا مشابهًا لحساب مربع إحاطة الكائن على وحدة معالجة الرسومات. فيما يلي الخطوات:

  1. قم بترتيب مخزن مؤقت للعرض بحجم 1x1 من النوع RGBA_32F في FBO الخاص به. تعيين كهدف تجسيد (بدون عمق / استنسل ، فقط مستوى لون واحد). يمكن أن يكون بكسل من نسيج أكبر ، وفي هذه الحالة ستحتاج إلى إعداد منفذ العرض بشكل صحيح.
  2. واضح مع القيمة الأساسية. بالنسبة لـ "min" ، سيكون عددًا كبيرًا ، بالنسبة إلى "max" سيكون رقمًا سالبًا.
  3. قم بإعداد وظيفة المزج "min" أو "max" بالتوافق مع المعاملات (1،1).
  4. ارسم شبكتك باستخدام تظليل ينتج نقطة بإحداثيات (0،0،0،1). قم بإخراج اللون الذي يحتوي على موضعك الأصلي في قمة الرأس.

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


التحديد المزدوج - العثور على نقطة الميزة ، إيقاف الوضع الطبيعي

مصدر البيانات الخاص بي عبارة عن شبكة 16 × 16 × 16 أجتاز هذه الشبكة من الأسفل إلى الأعلى ، من اليسار إلى اليمين ، بالقرب من البعيد.

لكل فهرس في شبكتي ، أقوم بإنشاء هيكل مكعب:

نظرًا لكيفية اجتياز الشبكة ، فأنا بحاجة فقط إلى إلقاء نظرة على 4 نقاط و 3 حواف. في هذه الصورة ، الرؤوس 2 ، 5 ، 6 ، 7 تتوافق مع رؤوسي 0 ، 1 ، 2 ، 3 ، والحواف 5 ، 6 ، 10 تتوافق مع حوافي 0 ، 1 ، 2.

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

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

للعثور على نقطة الميزة ، أردت القيام بذلك كما في هذا المنشور: https://gamedev.stackexchange.com/a/83757/49583

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

70٪ على طول الناتج سوف يستقر في أقل قدر من التكرارات.

ووظيفة للحصول على نقطة الميزة ، حيث أقوم بإنشاء 3 مستويات ، واحدة لكل حافة ومتوسط ​​المسافة إلى المركز:

لكنها لا تعمل ، فالرؤوس موجودة في كل مكان. أين الخطأ؟ هل يمكنني بالفعل حساب الحافة العادية عن طريق حساب المتوسط ​​الطبيعي لرؤوس الحافة؟ لا يمكنني الحصول على الكثافة عند نقطة منتصف الحافة ، لأن لدي شبكة عدد صحيح فقط كمصدر بيانات.

تحرير: وجدت هنا أيضًا http://www.mathsisfun.com/algebra/systems-linear-equations-matrices.html أنه يمكنني استخدام المصفوفات لحساب تقاطع المستويات الثلاثة ، على الأقل هذا ما فهمته ، لذلك لقد صنعت هذه الطريقة

يحسب تقاطعًا عند (2.0 ، 2.0 ، 2.0) ، لذلك أفترض أنه يعمل بشكل صحيح. ومع ذلك ، ليست القمم الصحيحة. أنا حقا أعتقد أن هذا هو أعمادي.


تعديل الاتصال الرأسي لمجال الارتفاع

أكمل الخطوات التالية أدناه لتعديل حقول ارتفاع الشبكة:

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

الحقول الوحيدة المتوفرة في القائمة المنسدلة هي تلك التي تحتوي على نوع بيانات عدد صحيح لأن مستويات الارتفاع محددة بواسطة أعداد صحيحة. أي قيمة عدد صحيح صالحة أي ، يمكن أن يكون للحقل الذي تختاره قيم موجبة وسالبة وصفرية.

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

يتم حفظ التغيير في حقل الارتفاع في مجموعة بيانات الشبكة.

عند تغيير أي من سمات الشبكة ، يجب إنشاء مجموعة بيانات الشبكة لإعادة إنشاء الاتصال وإعادة حساب السمات المتأثرة وتحديث عناصر الشبكة.


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

يحرر: لا تتعامل find_intersections أعلاه مع الخطوط الرأسية والأفقية ولا مقاطع الخطوط المتداخلة. تتعامل وظيفة الخط الخطي أدناه مع هذه الحالات ولكن العملية برمتها لا تزال بطيئة. لقد أضفت عددًا حتى يكون لديك فكرة عن المدة المتبقية. لقد غيرت أيضًا contour1 = plt.contour (Z1، colours = 'k') إلى contour1 = plt.contour (X، Y، Z1، colors = 'k') بحيث تكون المحاور والتقاطعات الخاصة بك في X الفعلي و Y كوورد من شبكتك بدلاً من عدد نقاط الشبكة الخاصة بك.

أعتقد أن المشكلة تكمن في أن لديك الكثير من البيانات. يوجد في مجموعة كفاف واحدة 24 سطرًا بإجمالي 12818 مقطعًا خطيًا ، بينما تحتوي المجموعة الكنتورية الأخرى على 29 سطرًا مع 11411 مقطعًا خطيًا. هناك الكثير من مجموعات مقاطع الخط التي يجب التحقق منها (696 استدعاءًا للتقاطع الخطي). يمكنك الحصول على نتيجة بسرعة أكبر باستخدام شبكة خشنة لحساب وظائفك على (100 × 100 كانت أسرع بكثير من 500 × 500 الأصلية). قد تكون قادرًا على القيام بنوع من خوارزمية مسح الخطوط ولكني لا أعرف كيفية تنفيذ مثل هذه الأشياء. تحتوي مشكلة تقاطع الخط على العديد من التطبيقات في ألعاب الكمبيوتر وتُعرف باسم اكتشاف الاصطدام - يجب أن تكون هناك بعض مكتبات الرسومات التي يمكنها تحديد جميع نقاط التقاطع بسرعة.

هذه المؤامرة مخصصة لشبكة مقاس 50x50 مع محوري X و Y الفعليين:


3 إجابات 3

يمكن استخدام الشكل الجميل لإيجاد نقطة التقاطع ، بدلاً من استخدام النقطة كقيمة init guess لـ fsolve () للعثور على الحل الحقيقي:

انظر إلى خطوط الكنتور كخطوط متعددة وقم بالتعويض عن إحداثيات الرأس في معادلة الخط الضمني (F (P) = a.X + b.Y + c = 0). كل تغيير في الإشارة هو تقاطع ، يتم حسابه عن طريق حل المعادلات الخطية 2 × 2. لا تحتاج إلى حل معقد.

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


قطع هرم مثلث بإحداثيات z دقيقة

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

يجب أن يكون للرؤوس ب ج نفس الإحداثي ع بالضبط. لذلك عندما يتم قص الحافة ، فإنها ستترك سطحًا مسطحًا تمامًا (غير زاوي).

لقد جربت تقسيم الرؤوس وانزلاقها (Shift V) ومحاولة الانجذاب إلى قمة في شبكة أخرى (مع الإحداثيات z المطلوبة) ، ولكن لا يوجد أي انجذاب للقمة لعمليات الشريحة.

لقد حاولت أيضًا شطف قمة الرأس إلى 0.0001 مما يسمح باستخدام Edge loop والشريحة ، ولكن تحدث نفس المشكلة بعد ذلك ، على سبيل المثال ، لا يوجد انجذاب للقمة.

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

هل هناك طريقة مضمنة (أو وظيفة إضافية) تتيح لنا ببساطة قطع كائن إلى قطعتين بدقة؟


خوارزمية تقاطع شبكية مثلثة موثوقة وتطبيقها في النمذجة الجيولوجية

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

هذه معاينة لمحتوى الاشتراك ، والوصول عبر مؤسستك.


شاهد الفيديو: أيجاد التقاطعات الأفقية و العمودية (شهر اكتوبر 2021).