PDA

View Full Version : سوال: یافتن مختصات درون یک منحنی بسته ی نامنتظم



Bahar_HS
سه شنبه 13 اردیبهشت 1390, 12:39 عصر
با سلام،
اگر چندتا منحنی نامنتظم(کج و کوله)روی فرم داشته باشیم و بخوایم تشخیص بدیم که کاربر داره کدوم از این منحنی ها رو انتخاب می کنه،این روش روش درستیه یا راه حل بهتری هم وجود داره؟

1)تشخیص مرزهای منحنی(بدست آوردن و ذخیره ی مختصات مرزی این منحنی ها)
2)داشتن مختصات درونی منحنی ها،بدست آوردن مختصات نقطه ای که کاربر کلیک کرده ومقایسه این 2 مختصات

پرسش اصلی من اینه که چطور میشه با داشتن مختصات مرزی منحنی ها ،مختصات درونی منحنی رو بدست آورد؟

Amir Oveisi
سه شنبه 13 اردیبهشت 1390, 14:19 عصر
سوالتون خیلی کلی هست، الگوریتم از نظر کلی درسته، اما اینکه شما چطور این شکل ها رو دارید رو راه حل تاثیر زیادی خواهد داشت. مثلا شکل هاتون image هستند؟ یا draw میشن؟ اگر draw میشن، توسط خود برنامه شما draw میشن یا به شکل دیگه ای از جای دیگه ای load میشن؟ لطفا توضیحات بیشتری از این قبیل رو ارائه کنید تا مسئله واضح تر بشه.

Bahar_HS
چهارشنبه 14 اردیبهشت 1390, 21:45 عصر
با سلام
شکل ها image هستند و حالا فکر می کنم که مسئله شامل 2 قسمت میشه:
1)شناسایی مرزهای اشکال
2)تشخیص مساحت داخلی اشکال
شکل موردنظر نقشه ی یه کشوره و با کلیک کاربر روی هر قسمت ،نام شهر برگردونده میشه.
(من تازه وارد مباحث گرافیکی C#شدم و به راهنمایی بیشتری نیاز دارم)
باسپاس

Saeed.Masoumi
پنج شنبه 15 اردیبهشت 1390, 14:04 عصر
سلام دوست عزیز.
اگر از منحنی منظورت محیطهای بسته است یک راه حل کلیش (و البته اصولیش به نظر من) اینه که بیاین حوزه (درست نوشتم!!؟) هر شهر رو مشخص کنید و با اون یک شکل بسته محدب یا مقعر ایجاد کنید سپس با استفاده از موقعیت کلیک موس بیاین و با استفاده از الگوریتم های (point-in-polygon (PIP مشخص کنی که وضعیت نقطه کلیک شده چطور بوده است یعنی داخل چند ضلعی - خارج آن - یا روی مرز آن , سپس بیاید و برای هر کدام از حالات کار دلخواه را انجام دهید.
شاید به نظرتان این روش در سرعت پردازش تاثیر داشته باشد اما شما می توانید کل شکل را پس از تعیین چند ضلعی های داخل آن, تبدیل به یک درخت کنید و پس از هر کلیک روی شکل این درخت را آنالیز کنید توضیحات بیشتر:
Collision detecting in 2D algorithms and methods

یک راه دیگه که اصلا قشنگ نیست (به نظر من البته) اگه تعداد شهر های مورد نظر کم باشه بیاین و روی هر شکل یک باتن (یا از ایونت کلیک PictureBox استفاده کنید) قرار دهید که با فشرده شدن آن یک مقدار یونیک به یک تابع پردازش فرستاده شود (مثلا کد تلفن شهر) سپس اون تابع بیاد و بر اساس آن مقدار عمل دلخواهتان را انجام دهد.

اگر در زمینه گرافیک و الگورتمهاش مبتدی هستید این کار برای شروع کار چندان خوبی نیست بهتر تمرینهای آسون تری پیدا کنید.
موفق باشد.

----
برنامش رو الان نوشتم بزودی قرار می دم همینجا

برنامه نوشته شد:
اساس کار اینجوریه که (یک کپی از عکس تهییه کنید) ابتدا هر استان را به یک رنگ رنگ آمیزی نمایید سپس کد RGB هر استان را بدست آورید.بعد با استفاده از دو تا حلقه تو در تو رنگ پیکسلها را چک کنید و آنهایی که شبیه هم هستند را در یه GraphPath اضافه کنید.سپس آن GraphPath را تبدیل به Region کنید سپس برای این که ببینید قسمتی که موس کلیک کرده در داخل Region است یا نه از دستور Region.IsVisible() استفاده کنید.
حالا برای این که هر دفعه نیاز نباشه که عکس رنگ آمیزی شده را چک و آنالیز کنید یک دفعه این کار را انجام دهید و داخل یک فایل یا XML یا پایگاه داده یا ... ذخیره کنید و هر دفعه اطلاعات را از اون فایل بخونید این طوری سرعتش خیلی بالاتر میره.
برنامه ضمیمه رو ببینید 100 در صد به کارتون میاد..
عکس رنگ شده:
69568
عکس اصلی:

69567

Bahar_HS
یک شنبه 18 اردیبهشت 1390, 16:22 عصر
با سلام
دقیقترشو که بخوام بگم برنامه اینطوریه که هر بار اسم شهرها به کاربر داده میشه و کاربر باید شهر موردنظر روی نقشه رو پیدا کنه،(روش کلیک کنه)و با توجه به اینکه چندمین باره که کلیک می کنه رنگ شهر موردنظر تغییر می کنه،یعنی هم برنامه باید بدونه کاربر داره کجا کلیک می کنه و هم رنگ اون منطقه تغییر کنه،ودر ابتدا هم رنگ همه ی شهرها یکسانه،برای این کار میشه از image استفاده کرد؟
گفتید بایه کار آسونتر شروع کنم ، با یه زمان 1.5 الی 2 ماهه میشه این کار رو انجام داد؟ یا از ادامه ی کار انصراف بدم؟
برای شروع باید از کجا شروع کنم؟

Saeed.Masoumi
دوشنبه 19 اردیبهشت 1390, 14:42 عصر
بین دوست عزیز مهم این است که با چه تخمینی می خواین این کار رو انجام دهید؟مثلا وقی یک شهری را بخواهیم کلیک کنیم با چه شعاعی از این شهر می توان کلیک کرد؟حالا اگه این شعاع زیاد باشه خوب یک کپی از نقشه اصلی انتخاب کنید سپس هر شهر ( و آن شعاعش که مورد نظر است) را یک رنگ منحصر به فرد کنید.سپس با استفاده از روشی که در مثال (ضمیمه) انجام دادم می تونید کاری که می خواهید را انجام دهید.
شما مثال را دیده اید؟!؟؟
اگر دیده اید مشکلات حل می شود.
این کار آسون است اگر روش پست قبل را متوجه شده باشید در غیر این صورت 1 ماه بسته به تلاش خودتان کافی است.

در ضمن شما سعی کنید هر مشکل را به چنیدن مشکل کوچکتر تقسیم کنید الان این مثال که شما زدید چندین مشکل را شامل می شود شما اول بیاین و مشکل مربوط به کلیک کردن (و دانستن آنکه کجا کلیک شده) را حل کنید سپس به دنبال ادامه و تغییر رنگ آن شهر بروید (هرچند اگر مثال قبلی را متوجه شده باشید این قسمت اصلا مشکلی نیست چون شما Region را بدست آورده اید و فقط باید آنرا رنگ کنید).
موفق باشید.

Bahar_HS
دوشنبه 19 اردیبهشت 1390, 15:35 عصر
با سلام
دفعه ی قبل که گفتید با یه کار آسونتر شروع کنید اینقدر حالم گرفته شد که متوجه بقیه ی توضیحاتتون نشدم،بخصوص اینکه قولشو داده بودم،ولی یه باره دیگه که خوندم متوجه توضیحاتتون شدم،توضیحات وراه حلتون خیلی عالی بود،
شما درست می گید، باید کاررو به بخش های مختلف تقسیم کنم و از مهمترین قسمتش شروع کنم .
باسپاس فراوان

Bahar_HS
شنبه 24 اردیبهشت 1390, 19:13 عصر
با سلام
می خواستم اول یه باره دیگه از آقای معصومی به خاطر راهنمایی و نمونه برنامه عالی شون تشکر کنم،
من می خوام عکس رنگی رو به برنامه بدم و عکس اصلی رو نشون کاربر،
فکر می کنم که این کار رو به همون روشی که گفتیدباید انجام بدم:


حالا برای این که هر دفعه نیاز نباشه که عکس رنگ آمیزی شده را چک و آنالیز کنید یک دفعه این کار را انجام دهید و داخل یک فایل یا XML یا پایگاه داده یا ... ذخیره کنید و هر دفعه اطلاعات را از اون فایل بخونید این طوری سرعتش خیلی بالاتر میره.


می خوام از روش ذخیره اطلاعات در فایل استفاده کنم،اون چیزی که باید ذخیره بشه،چیه؟
Region ها؟ در این مورد راهنمایی می خواستم.
باسپاس

Saeed.Masoumi
یک شنبه 25 اردیبهشت 1390, 11:59 صبح
سلام
مشخصه روش کار رو خوب متوجه شدین.حالا برای این مشکلی که قبلا هم در موردش گفتم اینجا (http://stackoverflow.com/questions/3949145/custom-form-shape-slow-to-load-store-region-on-disk-c)یک راه حل خوب وجود داره ببینید و اگه نیاز داشت بنا بر نیازتون تغییرش بدین.
موفق باشین.

Bahar_HS
دوشنبه 26 اردیبهشت 1390, 00:09 صبح
با سلام
برنامه ابتدا image رنگی رو برای آنالیز به کلاس Analyze می ده که در این کلاس پیکسل های هر ناحیه ی رنگی که نماینده ی یه شهره در یک Regionقرار داده می شه،Regionو Nameدر کلاس MapDataبا هم یکی میشن و بعد هر یک از این جفتName_ Regionها به کلاس Map داده می شه و در List قرار می گیره،
از اینجا به بعد اطلاعات Region_Name ها باید در فایل نوشته شه،همین طور از فایل باید بتونیم مشابه تابعی که در کلاس Map قرار داره،با استفاده از مختصات نقطه ی کلیک شده،Region_Name رو پیدا کنیم+مساله ی رنگ کردن منطقه ای که کاربر انتخاب کرده،
ولی من هنوز متوجه نشدم که نوشتن در فایل در کدوم مرحله از کار انجام میشه؟؟در ادامه ی کار کلاس Map یا چون نوشتن/خواندن از فایل مطرحه ،روند برنامه تغییر می کنه؟؟
کلاس Map،یه List داره که اشیا MapData که جفتName_ Regionها هستند در آن قرار می گیرند، این مساله د رفایل چطوری میشه؟؟یعنی چطوری میشه مشخصات Name_ Regionها ی مختلف رو در فایل ثبت و بعد هم بازیابی کرد؟؟ این مساله بیشتر به خوندن/نوشتن فایل مربوط میشه یا مسائل گرافیکی کار؟؟:متفکر:

Bahar_HS
دوشنبه 26 اردیبهشت 1390, 20:15 عصر
با سلام
برای رنگ آمیزی Region ها کد زیر رو به رویداد Paint،PictureBox اضافه کردم،ولی برنامه جواب نمی ده،چرا؟


e.Graphics.FillRegion(Brush,Region);

Saeed.Masoumi
سه شنبه 27 اردیبهشت 1390, 12:43 عصر
سلام



ولی من هنوز متوجه نشدم که نوشتن در فایل در کدوم مرحله از کار انجام میشه؟؟

ببینید چون هر دفعه که کاربر شما برنامه رو باز می کنه ابتدای اجرا ,کلی زمان هدر می ره تا آنالیز بیاد و عکس رو آنالیز کنه و جفت Region , Name ها رو بسازد و اگر عکس شما خیلی بزرگتر بشه زمان بیشتری صرف می شه (پیچیدگی زمانی اون الگوریتم بالاست) حالا برای اینکه هر دفعه وقتی برنامتون اجرا شد این آنالیز وقت گیر تکرار نشه کافی پس از اولین آنالیز فایل مربوط به مشخصات آنالیز شده ساخته بشه تا دفعات بعدی (در اجرای برنامه) مشخصات (MapData) از روی این فایل خونده بشه این یکی درسته درگیر I/O می شه اما باز هم به مراتب سریع تر از آنالیز کردن مجدد عکس است.

کلاس Map،یه List داره که اشیا MapData که جفتName_ Regionها هستند در آن قرار می گیرند، این مساله د رفایل چطوری میشه؟؟
ببینید این دیگه به شما و روش کارتون بستگی داره می تونید هر جفت داده رو در فایل ذخیره کنید یا فقط Region ها رو + یک کلید سپس موقع خواندن از فایل یا بیاین و هر جفت رو از فایل بخونید و در برنامه ازش استفاده کنید یا بیاین و بر اساس اون کلیدی که دریافت کردین Reguon مربوط به نام یک شهر رو از داخل فایل پیدا کنید.



یعنی چطوری میشه مشخصات Name_ Regionها ی مختلف رو در فایل ثبت و بعد هم بازیابی کرد؟؟

اون لینکی رو که دادم ملاحظه کنید و ازش ایده بگیرید اگه متوجه نمیشین داره چی کار می کنه مبحث Serialization رو مطالعه کنید (توی همین انجمن یکی از دوستان یک تاپیک خوب براش ایجاد کرده بود پیدا کردم لینکش رو می زارم)



این مساله بیشتر به خوندن/نوشتن فایل مربوط میشه یا مسائل گرافیکی کار؟

شما دیگه از مبحث گرایکش اومدین بیرون این مبحث همانطور که در بالا گفتم به Serialization و I/O مربوط میشه.



برای رنگ آمیزی Region ها کد زیر رو به رویداد Paint،PictureBox اضافه کردم،ولی برنامه جواب نمی ده،چرا؟

اون دستور رو برای چی توی ایونت Paint نوشتید؟متد Paint که هر لحظه اجرا نمیشه (تا سیستم عامل صدایش نزند یا خودتون اون رو به صورت دستی فایر نکنید) به جای نوشتن در اون ایونت بهتره یک تابع تشخیص صحت بگذارید سپس بعد از کلیک شدن بیاید و اگر این کلیک بر روی جای دلخواه بود رنگ Region را عوض کند در عیر این صورت پیغامی مبنی بر اشتباه کردن چاپ کند . حالا کجای برنامه باید این تابع را صدا کنید؟؟توی متد OnMouseClick از PicturBox .

من اون مثال رو نزدم که شما عینا همون کار ها رو تکرار کنید شما از اون مثال ایده بگیرید و روش کلی کار دستتون بیاد و برنامه ی خودتون را با بهترین روش ممکن که خودتان تشخیص می دهید بنویسید چون هر جور که باشد خودتون بهتر راجع به برنامه ی خودتون اطلاع دارید.
امیدوارام کامل توضیح داده باشم.
موفق باشید

Bahar_HS
چهارشنبه 28 اردیبهشت 1390, 18:14 عصر
با سلام،
ممنون از اینکه راهنمایی تون همراه با سوالای من ادامه داره،
درمورد رنگ آمیری Region ها بیشتر منظورم کدنوشته شده بود ،وگرنه در مورد رویدادش شما درست می گید،سیستمم ویروسی شده بود و اشکالش از این بود.
بازهم ممنون از راهنمایی تون

Bahar_HS
پنج شنبه 29 اردیبهشت 1390, 23:08 عصر
با سلام
در ادامه ی سوال قبلی م در مورد رنگ آمیزی Region ها،می خواستم بدونم این رنگ کردن از طریق این کده؟

e.Graphics.FillRegion(Brush,Region)
اگر با این کد این کار انجام میشه ، e شی از کلاس PaintEvents است و در رویداد موس کلیک به این e نمیشه دسترسی داشت،مگه اینکه برای رنگ آمیزی Region ها،روش دیگه ای وجود داشته باشه،بخصوص اینکه این رنگ آمیزی ،همون طور هم که خودتون اشاره کردید همراه با رویداد موس کلیک انجام میشه،امیدوارم سوالم رو روشن مطرح کرده باشم،
اگر لطف کنید ولینکی رو هم که گفته بودید ،بگید چطوری پیداش کنم،ممنون میشم،چون در این بخش(خوندن و نوشتن از فایل) کارم متوقف شده.

Saeed.Masoumi
جمعه 30 اردیبهشت 1390, 17:37 عصر
سلام
ببینید من فرض می کنم را جع به مثال خودم دارم صحبت می کنم (چون واقعا هیچ ایده ای ندارم که شا چه جوری برنامتون رو نوشته اید) اگه یادتون باشه توی اون مثال من یک PictureBox وجود داشت که عکس ها را نمایش می داد حالا من بعد از اینکه کلیک زده شد روی عکس و مقدار Region آن محل بدست آمد حالا این Region را به تابع ای که وظیفه ی رنگ کردن را به عهده دارد فرستاده می شود بدنه تابع را اینطوری فرض کنید:
public void Coloring(Region Rgion, Control Ctrl)
{
Brush b = Brushes.Red;
Graphics G = Ctrl.CreateGraphics();
G.FillRegion(b, Rgion);
G.Dispose();
b.Dispose();
}

بعد از کلیک تابعی که قرار است تشخیص دهد آیا درست کلیک شده یا نه فرا خوانی میشود اگر مقدار True برگردانده شد آنگاه Region مورد نظر را به تابع Coloring می فرستیم.توجه کنید که پارامتر دوم تابع Coloring از نوع کنترل است یعنی باید آن PictureBox مورد نظر به آن فرستاده شود اینطوری:
Coloring(r, this.pictureBox1);
در مورد اون لینک هم منم نتونستم پیداش کنم ولی در اینترنت در مورد سریالایز مطلب زیاد هست.راه دیگر هم استفاده از I/O های معمولی (روشی غیر از روش قبلی) این است که از Region.data استفاده کنید.ولی اکیدا روش اول توصیه می شود.
موفق باشید.

Bahar_HS
جمعه 07 مرداد 1390, 13:17 عصر
با سلام،
حدود 5/2 ماه قبل این تایپیک ایجاد شد ومن این سوال رو مطرح کردم:

"اگر چند تا منحنی نامنتظم(کج و کوله)روی فرم داشته باشیم،برنامه چطور تشخیص میده که کاربر روی کدوم منحنی کلیک کرده؟"
آقای اویسی در جواب،این پرسشها رو مطرح کردند:

شکلهاimageهستند
drawمیشن
توسط خود برنامه draw میشن
از جای دیگریload میشن
پرسش بعدی(در ادمه پرسشی که مطرح کرده بودم) اینه که آیا درسته که:
محدوده ی جغرافیایی شهرها و کشورها رو به عنوان یک منحنی نامنتظم در نظر بگیریم؟
پرسش دقیقتر اینه که چطور می تونیم محدوده ی داخلی شهرها/کشورها یا مرزهای جغرافیایی شهرها/کشورهای روی نقشه رو به برنامه معرفی کنیم؟
(چه برای رسم و چه برای تشخیص محدوده ی شهرها و کشورها)
فعلا این 2تا پرسش رو داشته باشید....

برنامه و کاربر از طریق کلیک با هم ارتباط برقرار می کنند،کاربر می خوادشهر/کشوری رو که برنامه ازش سوال کرده پیدا کنه،کاربر روی اون شهر/کشور کلیک
می کنه،برنامه هم پاسخ کاربر رو از طریق کلیکی که کاربرکرده،تشخیص می ده،
نگاه برنامه به این کلیک براساس مفهوم مختصاته، برنامه می تونه تشخیص بده کاربر رو ی کدوم نقطه از فرم کلیک کرده،هر نقطه با مختصاتش تعریف میشه(i,j)

نقطه ی شروع کار رو image در نظر گرفتم و با این فرض کار این طور ادمه پیدا کرد:
قراره نقشه ای که به برنامه می دیم image باشه،نگاه برنامه به این image باید نگاه "نقشه ای" باشه،یعنی چی؟
یعنی مثل خودمون،برنامه باید بتونه بین شهرها/کشورهای مختلف روی نقشه تمایز قائل بشه، یعنی یه جورایی مفهوم نقشه رو بهش بفهمونیم

آقای معصومی ایده ی جالبی رو مطرح کردند:
رنگ آمیزی شهرها/کشورهای رو ی نقشه ،با 2آرایه ی city و clor می تونیم هر منطقه ی روی نقشه رو با یک رنگ به برنامه معرفی کنیم:

من در ادمه از 2تا pictureBox استفاده کردم،pictureBox زیری،image رنگی رو نمایش می ده(که کاربر اصلا نمیبینتش) و همون پارامتری که برای فهماندن مفهوم نقشه به برنامه می دیم و pictureBox بالایی که یک رنگه،به کاربر نشون داده میشه،

این 2تا pictureBox باید دارای یک Location باشند.
image باید حتما در حالت Normal باشه.

حالا فرض کنید می خوایم فرم برنامه در حالتmax باشه و نقشه هم هم اندازه ی فرم باشه(یعنی در حالت max نمایش)،یعنی برنامه،به اندازه ی ابعاد صفحه نمایشی که برنامه داره روش اجرا میشه،خودشو تنظیم می کنه،

نگاه برنامه به image_ای که برای نمایش بهش می دیم، نگاه نرماله،یعنی اگرpictureBox رو در حالتهای مختلف(برای نمایش تصویر)تنظیم کنیم،اگر چه تصویر در ابعاد مختلف نمایش داده می شه ولی همواره،برنامه،تصویر رو با ابعاد واقعی خود تصویر می بینه(اگر در برنامه از یکMassageBox برای نمایش ابعاد تصویر استفاده کنید،متوجه منظورم میشید)،پس نمیشه از SterechImage برای نمایش maxاستفاده کرد،این Resize شدن باید از طریق کدنویسی انجام بشهhttp://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-saving-cropping-and-resizing
اگر این Resize شدن هم انجام بشه، نقاط مشکی رنگی که در تصویر برای مرز ها در نظر گرفته شده، افزایش پیدا می کنه،در واقع با Resizeشدن تصویر،کیفییت تصویر دوباره رسم شده،کاهش پیدا می کنه(آیا روش بهتری وجو داره؟)
مساله ی بعدی پیچیدگی زمانی برنامه است که با بزرگ شدن ابعاد تصویر و استفاده از نقشه ای با تعداد بیشتری شهر/کشور قابل توجه است
آیا استفاده از سیستم 255 رنگی در الگوریتم برنامه،اشکالی در اجرای برنامه بر روی سیستم های مختلف،بوجود میاره یا نه؟
کیفیت تصاویری که به عنوان نقشه به برنامه داده میشه در این روش مهمه

با توجه به توضیحات بالا،می توان روش دیگری را برای برنامه بکار برد:
رسم نقشه ها با خود برنامه باشد
(نمی دونم بکاربردن این عبارت درسته یا نه؟ ولی مساله ی اصلی اینه که دیگه برنامه با image کار نمی کنه)


مدتی که در موردDrawing&Drawing2D در سی شارپSearch می زنم،چیزی که من متوجه شدم اینه که رسم حداقل به تا پرامتر نیاز داره:
"مجموعه نقاط برای رسم که این نقاط هم با مختصاتشون روی فرم تعریف میشن"
"Locationرسم"

در ابتدای توضیحاتم گفتم که برنامه و کاربر از طریق کلیک با هم ارتباط دارند و این کلیک با مفهوم مختصات در ارتباطه

اگر بخوایم برنامه فرم و نقشه رو در حالت max نشون بده و روی سیستم های مختلف،با ابعاد صفحه نمایشهای متفاوت،حالتMax خودشو حفظ کنه و درست هم کار کنه(من اینطور فکر می کنم)که رسم نباید وابستگی به مفهوم مختصات داشته باشه
پرسش خیلی مهم اینه که:

آیا میشه این وابستگی رو حذف کرد؟
آیا با وجود این وابستگی میشه رسم نقشه رو توسط خود برنامه انجام داد؟
یا شاید باید از زاویه ی جدیدی به این موضوع نگاه کرد؟روشی متفاوت با آنچه که گذشت...
یاشاید، باید از پایه فرض جدیدی رو در نظر گرفت؟
این توضیحاتی بود راجع به نتایج فعلی این تایپیک و براساس تجزیه و تحلیل خودم که ممکنه درست هم نباشه، خیلی سعی کردم روشن و شفاف توضیح داده باشم،
امیدوارم اینطور بوده باشه و بتونم از راهنمایی دوستان استفاده کنم و در این تایپیک بتونیم به نتایج خوبی برسیم.
یه عذرخواهی بابت طولانی شدن توضیحات! :لبخند:

Amir Oveisi
جمعه 07 مرداد 1390, 23:58 عصر
بی ربط:

اگر چند تا منحنی نامنتظم(کج و کوله)روی فرم داشته باشیم کج و کوله خیلی باحال بود کلی خندیدم :قهقهه:

با ربط:
همونطور که قبلا هم عرض کردم خدمت شما، همه این ایده ها و فرضیات بستگی به یک موضوع مهم داره، اینکه شما اطلاعات مورد نیاز برای نقشه رو به چه صورتی دارید؟ این مسئله مهم تر از اون چیزی هست که فکرشو می کنید، خیلی میتونه رو روش کار کردنتون تاثیر بزاره. مثلا شما عکس نقشه ها رو دارید؟ مختصات جغرافیایی شهر ها و استان ها رو دارید؟ یکی قراره نقشه رو خودش بکشه؟ از یک نرم افزار دیگه مثل GIS قراره نقشه ها رو Import کنید؟؟ می بینید که راه های مختلفی برای گرفتن اطلاعات نقشه وجود داره و بر اساس هر کدوم، راه حل ها متفاوت خواهد بود. پس لطفا قبل از هر چیز این موضوع رو برای خودتون و بقیه مشخص کنید تا بشه با یه دید حداقلی به مسئله نگاه کرد.
موفق باشید :)

Bahar_HS
شنبه 08 مرداد 1390, 01:19 صبح
با سلام


از یک نرم افزار دیگه مثل GIS قراره نقشه ها رو Import کنید؟؟

اگر برای استفاده ازGIS باید برنامه نهایی به اینترنت کانکت باشه،احتمالا از این روش نیست،ولی از چه روشی اطلاعاتش رو می گیره،هیچ ذهنیتی نسبت به این مساله ندارم:متفکر::متفکر::متفکر:

Amir Oveisi
شنبه 08 مرداد 1390, 02:08 صبح
خوب پس اول این مساله رو حل کنید بعد برید مراحل بعدی.

Bahar_HS
یک شنبه 09 مرداد 1390, 14:54 عصر
باسلام
میشه با این فرض شروع کرد؟"تصاویرنقشه هارو داریم"
فکر می کنم با این فرض برنامه 2 قسمتی میشه:
1)برنامه اول از روی تصاویری که بهش می دیم اطلاعات رسم رو استخراج می کنه،
2)برنامه ی دوم اطلاعات رسم رو داره،فقط کار رسم نقشه ها انجام میده،(برنامه ی نهایی)
یک نکته ی خیلی مهم اینه که مساله فقط رسم نیست،برنامه علاوه بر رسم نقشه ها باید محدوده ی هر شهر/کشور روی نقشه رو بدونه،
این مرحله(شناسایی شهرها/کشورها روی نقشه)شیوه ی رسم رو تعیین می کنه یا شیوه ی رسم تعیین کننده ی الگوریتم این مرحله است؟
.....
چه فرض دیگری رو میشه (به غیر از GIS)ارائه داد؟
(نرم افزار نهایی نباید برای اجرا به کانکت بودن به اینترنت نیازی داشته باشه،ولی در زمان طراحی نرم افزار میشه اطلاعات رسم رو اینطوری هم گرفت)
درپناه مهربانترین مهربانان

Amir Oveisi
یک شنبه 09 مرداد 1390, 16:33 عصر
خوب اگر شما عكس نقشه ها رو داشته باشيد ميشه با چند روش كار كرد:
1- كار مشخص كردن محدوده شهر ها و استان ها و هر جاي ديگه اي كه نيازه بصورت دستي مشخص بشه، به اينصورت كه مثلا مشخص مي كنيد كه شهر A در مختصات x,y اين عكس قرار داره و يا استان B نقاط مرزيش داراي مختصات هاي فلان هستند. و بر اساس اينكه كاربر كجا كليك كرده، ميتونين بفهمين كه كليك روي چه شهري يا در محدوده چه استاني بوده.
2- استفاده از طول و عرض جغرافيايي واقعي شهر ها و استان ها براي مشخص كردن اون ها روي نقشه. به اين شكل كه شما طول و عرض جغرافيايي مكان هايي رو كه ميخواين از گوگل مپ در مياريد، و طول و عرض جغرافيايي boundary اون عكس رو هم پيدا مي كنيد. يعني اينكه مشخص مي كنيد كه اين عكسي كه داريد از عرض جغرافيايي y1 تا y2 و از طول جغرافيايي x1 تا x2 رو داره نشون ميده. حالا كافيه كه x1 و y1 رو به عنوان offset قرار بديد و با يه تبديل واحد مشخص كنيد كه هر طول و عرض جغرافيايي نقشه واقعي، چند پيكسل روي تصوير نقشه (عكسي كه داريد) هست. با اين كار ميتونين بر اساس اينكه كاربر كجاي نقشه كليك كرده، طول و عرض جغرافيايي معادل اون نقطه رو بدست بياريد و با استفاده از اون طول و عرض بدست اومده، شهر متناظر رو مشخص كنيد.

در كل به نظرم مياد روش دوم بهتر باشه.

Amir Oveisi
یک شنبه 09 مرداد 1390, 16:34 عصر
در ضمن اگر تصوير نقشه ها رو داريد به نظرم نيازي نباشه كه دوباره برنامه بخواد اونارو رسم كنه، مگر اينكه بخوايد نقشه ها رو به شكل متفاوتي از نقشه اصلي نشون بديد.

Bahar_HS
دوشنبه 10 مرداد 1390, 14:50 عصر
با سلام
بازهم خیلی خیلی ممنون از راهنمایی و کمکتون،روش کار می کنم ببینم به کجا می رسه.

Bahar_HS
دوشنبه 29 اسفند 1390, 16:24 عصر
با سلام،
من بالاخره راه حل موردنظرم رو پیدا کردم!
البته خیلی وقت پیش،خواستم دینم رو به اهالی "برنامه نویس"ادا کرده باشم،
راه حل اینجاست! (http://www.codeproject.com/Articles/11825/Sending-Data-from-a-Flash-Movie-to-the-Hosting-C-A)