الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

رسم خرائط كونتورية

بدأه Talal Bader في 23 أكتوبر 2008 · 6 رد · 3,561 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله

إلى الأخوة الذين لديهم خبره في مجال برمجة المخططات البيانية و الخرائط أو من يرغبون في المساعدة

أحاول أن أبني مكون لرسم الخرائط الكونتورية ( قيم X و Y و Z ) ترسم من ملف بيانات بحيث XY يمثلان مكان النقطة على الخريطة و Z قيمة المتغير الذي يمثل إما بخطوط كونتورية أو بلون

في الواقع أنا بحاجة لمعرفة كيفية رسم الخريطة بحيث تكون قيمة Z تمثل بالألوان

حتى لا أطيل إذا هناك من هو مهتم سو أشرح بالتفصيل ما أبحث عنه

و شكرا لكم

#2
اقتباس
حتى لا أطيل إذا هناك من هو مهتم سو أشرح بالتفصيل ما أبحث عنه

أشرح بالتفصيل ...

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#3
اقتباس
أشرح بالتفصيل ...

الأخ delphawi

شكرا لاهتمامك:

التفاصيل

إذا كنت قد رأيت خريطة طبوغرافية أو خريطة الأحول الجوية( الضغط الجوي ) فهذا النوع من الخرائط هي عبارة عن مخطط بياني فيه المحور X يمثل قيم خط الطول (الموقع باتجاه شرق غرب) و المحور Y يمثل قيم خط العرض ( الموقع ياتجاه شمال جنوب ) و بذلك تكون (X, Y ) تمثل موقع محدد على الخريطة

أما الخطوط المنحنية التي ذكرتها( فإذا أخذنا مثلا الخريطة الطبوغرافية التي تبين الارتفاع عن مستوى سطح البحر ) فكل خط يعني ان جميع النقاط التي تقع على هذا الخط لها نفس قيمة الارتفاع عن سطح البحر

الصورة المرفقة توضح ذلك و فيها رسمت نقاط بشكل دوائر سوداء لتوضيح الفكرة التالية

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

هناك عدة طرائق لتمثيل قيم الارتفاع في الخريطة

الأولى بواسطة الخطوط الكونتورية كما شرحتها

الثانية باستخدام نفس المبدا ولكن يتم تلوين كل مجال بين خطين بلون معين يمثل قيمة الارتفاع

و الثالث هو بتلوين الخريطة كها بحسب قيمة الارتفاع بشكل طيف من الألوان فليس هناك لون أزرق مثلا ثم أصفر يكون هناك تدرج لوني بينهما

ما أحاول مناقشته و التوصل له هو طريقة عملية لعمل ما يلي

- قراءة بيانات من ملف تمثل قيم كل من x y z ( حيث z ) الارتفاع

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

- رسم هذه البيانات على canvas بحيث كل بكسل يأخذ لون يمثل قيمة الارتفاع ( و x y ) للبكسل يمثل موقعها على الخريطة

- رسم الخطوط الكونتورية

و الهدف الأساسي هو التوصل إلى إنشاء مكون دلفي يقوم بكل هذه المهام و أشياء أخرى تتعلق بالخرائط و لكن هذه هي البداية فقط

السبب وراء ذلك هو ان هذا النوع من المكونات مكلف جدا و حتى النوع المجاني الموجود على النت لا يؤدي كل ما احتاجه

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

أتمنى أن يكون ما كتبته وضح الفكرة

و شكرا

post-172875-1224875858_thumb.jpg

#4

أخي طلال

لقد جذبتني الفكرة وأنا أريد أن أحاول المساعدة ولكن إعذرني إذا كنت سوف أكثر من الأسئلة ولكن ذلك لتصل الفكرة لي بشكل جيد

أولا

كيفة إدخال المعلومات من ملفات لديك جاهزة ويرسمها المكون أم أننا سوف نرسم الخرأئط يدويا وهو يحفظها في ملف أم لاهذه ولا تلك

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

والسلام

#5

السلام عليكم...

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

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

كلنا - أو معظمنا - كمبرمجين نعرف أنه هناك على الأقل نظامين من الإحداثيات (Coordinate Systems):

1. نظام إحداثيات الشاشة: حيث تعتبر الزاوية العلوية اليسرى للشاشة (أو أي مكون موجود عليها) هي نقطة الأصل (0 , 0). حيث يمتد الاتجاه الموجب للمحور الأفقي (X) باتجاه اليمين، و يمتد الاتجاه الموجب للمحور الرأسي (Y) باتجاه الأسفل (أي أن قيمة X تزداد كلما اتجهنا يميناً، و قيمة Y تزداد كلما اتجهنا إلى الأسفل).

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

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

النقطة المهمة الأخرى هي أننا سنحتاج إلى استعمال نظام إحداثيات آخر، هو في الواقع مشتق من نظام الإحداثيات الكارتيزي و يستعمل نفس محاوره، لكنه يعتمد على استعمال وحدات قياس و ليس البكسل (Pixels) التي هي وحدات قياس الشاشة. سنسميه نظام إحداثيات الوحدات (Unit Coordinate System).

لتوضيح هذه النقطة: لنفرض أننا نريد أن نكتب على المحور الأفقي (X) قياسات من 0 إلى 10. إذا اعتمدنا على أن كل وحدة تقابلها بكسل واحدة فإن المسافة من 0 إلى 10 ستكون ضئيلة جداً جداً جداً. لكن إذا قلنا مثلاً أن كل 10 بكسل ستمثل وحدة واحدة فإن المحور سيكون بطول 100 بكسل، ما يعطينا صورة أوضح و مساحة أكبر لكتابة الآرقام و غيرها.

ContourMaps.rar

أرجو أن يكون فيما قلته فائدة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#6

الأخوة الكرام شكرا لاهتمامكم

أولا رد للأخ حسين

البيانات تكون على شكل ملف نصي فيه ثلاث أعمدة كما يلي

x y z

1 1 1

3 2 1

5 3 8

يقوم البرنامج بقراءة هذه القيم و من ثم يرسمها

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

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

و إذا كان حدا حابب يدور فهناك طريقتين مشهورتين للاستكمال تستخدم في الخرائط هما Kriging و Minimum curvature

أما عن طريقة الرسم فكما ذكر الأخ naji zl فكلامه صحيح لكي نرسم خريطة ( أو أي مخطط بياني ) يجب القيام بحساب محاور إحداثيات جديدة غير المحددة في الشاشة

فيجب معرفة أكبر و أصغير قيمة على كل من محوري xو Y و من ثم من خلال ذلك يتم حساب موقع أي نقطة على الشاشة بناءً على إحداثياتها على الخريطة

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

طريقة التحويل بين الإحداثيات الحقيقية للخريطة و إحداثيات الشاشه ليست صعبة و يمكن (وهذا ما اتبعه انا) إنشاء procedure مدخلاته قيم المحاور الصغرى و العظمى و بداية و نهاية المحور بالبكسل على الشاشة كذلك قيمة الاحداثية المراد حسابها و يعيد لنا قيمة البكسل الذي يمثل النقطة

و تبقى المشكلة هي في التوصل إلى معادلات الاستكمال و ذلك لكي نتمكن من حساب قيمة z في إي نقطة من الخريطة تكون ففيها غير معلومة

و كذلك كيفية تلوين كل بكسلات الشاشة ضمن الخريطة بشكل سريع مهما كان عدد القيم و مهما كان حجم الخريطة ( ضمن حدود المعقول :) )

#7

السلام علبكم

اخوتي اعضاء منتدي الدلفي اقدم لكم اعتذاري لكوني اغلقت الموضوع سهوا مني .

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 30 أكتوبر 2008 في 22:47

مواضيع مشابهة