حاجز جزيرة الجيل

تشير أخبار إعصار فلورنسا في ديسمبر / كانون الأول إلى "المياه الضحلة الخارجية" - سلسلة من الجزر العازلة قبالة ساحل ولاية كارولينا الشمالية:


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

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

لفهم سبب ذلك ، دعونا نلقي نظرة على خريطة الفانيليا للجزيرة:


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


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


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


هذا يمكن أن يعطينا السواحل والجزر الصغيرة المكسورة للغاية على طول الساحل ، ولكن لا شيء يشبه جزيرة الحاجز.

السبب الوحيد لذلك هو أن الضوضاء غير متطابقة في x و y ، لذلك على الرغم من أن الضوضاء ليست عشوائية بشكل عام ، فإن الأشكال التي تنشئها عشوائية:


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

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

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


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

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


أو يبدو بسيطا. دعونا نرى ما يحدث إذا قمت بإسقاط الخط الساحلي إلى الخارج قليلاً (لإنشاء الجانب الآخر من قناع الجزيرة) على الجزء الأقل سلاسة من الخط الساحلي:


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

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

حتى الآن يمكنني إنشاء أقنعة بسيطة (بدون حلقات) للجزر:


هذا متساوٍ للغاية ، لذا سأشوه المعالم:


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

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


الآن دعونا نحاول إضافة بعض الأراضي. للقيام بذلك ، سأرفع ارتفاع أي موقع أرضي (مثلثات ديلوناي) فوق مستوى سطح البحر:


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


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

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


ولكني أود أن أتعلم كيفية إنشاء جزر ضيقة للغاية. هناك طريقة أخرى تتمثل في (زيادة) عدد المواقع في العالم لزيادة الدقة:


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

في كلتا الطريقتين ، هناك فرصة جيدة لأن تكون بعض أجزاء الجزيرة غير متساوية:


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


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

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


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


لذلك ، عند إنشاء جزيرة عازلة ، آخذ في الاعتبار القوس بالكامل وأرفق اسمًا واحدًا ، حتى لو كان ذلك نتيجة لتقسيم الجيل إلى عدة جزر:


عادة ما تسمى الجزر العازلة "البنوك" أو "مهاوي" (القضبان) ، لذلك تم العثور على هذه الكلمات في أسماء مختلفة.

يوضح هذا المثال مشكلة جزيرة محتملة:


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

Source: https://habr.com/ru/post/ar439198/


All Articles