PDA

View Full Version : رسم خط در c#



safa55
سه شنبه 16 تیر 1394, 10:19 صبح
با سلام
دوستان ، من همانند شکل زیر چند نقطه به صورت random در صفحه ایجاد کردم و حالا می خواهم خط قرمز را بین نقطه ها بکشم
به نظرتون باید چکار کنم. فقط بین همان چند نقطه منظورم است نه بین کل نقطه ها.؟
در ضمن بنده موقعیت مکانی هر کدام از نقطه ها را نیز دارم. فقط نمی دانم چطور مقایسه کنم که موقعیت نقطه مثلا به صورت قطری است و باید کشیده شود و در سایر جاها کاری انجام ندهد.
132983

reza_ali202000
سه شنبه 16 تیر 1394, 13:37 عصر
یه ارایه از نقاطت به دست بیار به صورت صفر و یک.بیا کل صفحت رو تبدیل به ارایه مثلا 100*100 تبدیل کن. حالا توی هر مختصاتی که نقطه داری یک و بقیه رو صفر بزار.
حالا توی این ارایه میتونی هر کاری کنی. مثلا قطرهاش رو بدست بیاری یا گوشه هاشو به دست بیاری. بعد از بدست آوردن حالا از نقاط میتونی خط بکشی.

MehdiElexal
سه شنبه 16 تیر 1394, 14:39 عصر
از کتابخانه System.Drawing استفاده کنید برای ترسیم خطوط

safa55
سه شنبه 16 تیر 1394, 20:05 عصر
یه ارایه از نقاطت به دست بیار به صورت صفر و یک.بیا کل صفحت رو تبدیل به ارایه مثلا 100*100 تبدیل کن. حالا توی هر مختصاتی که نقطه داری یک و بقیه رو صفر بزار.
حالا توی این ارایه میتونی هر کاری کنی. مثلا قطرهاش رو بدست بیاری یا گوشه هاشو به دست بیاری. بعد از بدست آوردن حالا از نقاط میتونی خط بکشی.

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

safa55
جمعه 19 تیر 1394, 17:48 عصر
دوستان خیلی گیر این بحثم. لطفا یه راهنمائی کنید.

amirali0079
جمعه 19 تیر 1394, 18:11 عصر
باید از System.Drawing استفاده کنید و یک آبجکت Graphics بسازید برید تو سایت Stackoverflow جستجو کنید

ali_72
شنبه 20 تیر 1394, 06:59 صبح
ترسیم خط که خیلی آسونه مطمئنن تو پیدا کردن نقاط مورد نظرتون دچار مشکل شدید
من هنوز متوجه نشدم معیار شما برای انتخاب نقاط مورد نظرتون چیه؟ یعنی نقاط شما تشکیل یه چهارضلعی نامنظم میدن و شما می خواهید قطر اونو بدست یبارید؟

rahnema1
شنبه 20 تیر 1394, 07:15 صبح
سلام
ابتدا لازمه دو نقطه گوشه را به دست بیارید. مثلا نقطه ای که مجموع مختصات x و y اون از همه بیشتر می شه در یک گوشه و نقطه دیگه هم نقطه ای هست که مجموع مختصاتش کمترین می شه بنابراین این دو نقطه را A و B نامگذاری می کنیم یعنی نقطه اول و آخر به دست اومد
حالا در بین تمام نقاط به دنبال نقطه ای به نام C می گردیم که اگه اون را از یه طرف به A و از طرف دیگه به B وصل کنیم
زاویه ای که از اتصال دو خط AC و CB ایجاد میشه باید به 180 درجه نزدیک باشه در غیر این صورت نقطه C مردود می شه و باید به دنبال نقطه ی دیگری بود
در واقع C نقطه ای هست که زاویه ای که ایجاد می کنه نزدیکترین زاویه به 180 درجه هست
133131
بعد باید از یه طرف نقاط بین A وC و از طرف دیگه نقاط بین C و B را پیدا کنیم
نقطه ی D بین A و C با همون شرطی که گفتیم پیدا می شه و باید از یه طرف نقاط بین A و D و از طرف دیگه نقاط بین D و C را پیدا کنیم
مثلا یک نقطه بین A و D پیدا می کنیم که با نقطه چین آبی نشون داده شده اما زاویه ی اون نزدیک به 180 درجه نیست و مردود می شه
133132

safa55
شنبه 20 تیر 1394, 17:42 عصر
سلام
ابتدا لازمه دو نقطه گوشه را به دست بیارید. مثلا نقطه ای که مجموع مختصات x و y اون از همه بیشتر می شه در یک گوشه و نقطه دیگه هم نقطه ای هست که مجموع مختصاتش کمترین می شه بنابراین این دو نقطه را A و B نامگذاری می کنیم یعنی نقطه اول و آخر به دست اومد
حالا در بین تمام نقاط به دنبال نقطه ای به نام C می گردیم که اگه اون را از یه طرف به A و از طرف دیگه به B وصل کنیم
زاویه ای که از اتصال دو خط AC و CB ایجاد میشه باید به 180 درجه نزدیک باشه در غیر این صورت نقطه C مردود می شه و باید به دنبال نقطه ی دیگری بود
در واقع C نقطه ای هست که زاویه ای که ایجاد می کنه نزدیکترین زاویه به 180 درجه هست
133131
بعد باید از یه طرف نقاط بین A وC و از طرف دیگه نقاط بین C و B را پیدا کنیم
نقطه ی D بین A و C با همون شرطی که گفتیم پیدا می شه و باید از یه طرف نقاط بین A و D و از طرف دیگه نقاط بین D و C را پیدا کنیم
مثلا یک نقطه بین A و D پیدا می کنیم که با نقطه چین آبی نشون داده شده اما زاویه ی اون نزدیک به 180 درجه نیست و مردود می شه
133132

ممنون از شما دو دوست.
آقای Ali_72 دلیل اینکه می خوام همچین چیزی داشته باشم این است که یکی از نقاط با بقیه مثلا فرق دارد و آخرین نقطه ای است که در صفحه قرار می گیرد و نسبت به محلی که قرار می گیرد می خواهم یک خط تا به سمت دیگر صفحه با گذر از چند نقطه که به آخرین نود سمت دیگر است خط بکشم. مثلا اگر در سمت راست بالا بود ،خط را از سمت راست بالا به سمت چپ پایین رسم کند.و در سایر موارد هم همین عمل به سمت دیگر رسم می شود. مثلا نقطه آخر در طرف راست باشد باید به طرف چپ کشیده شود. و.....

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

ali_72
یک شنبه 21 تیر 1394, 07:39 صبح
نقاط انتخابی شما همیشه در راس هستند؟ یعنی بالاترین راست ترین، بالاترین چپ ترین، پایین ترین چپ ترین، پایین ترین راست ترین؟
اگه اینه که کدنویسیش کار ی نداره و اگه این نیست تمایل داشتید صورت مسئله را با جزئیات بیشتری شرح بدید ممنون میشم

safa55
یک شنبه 21 تیر 1394, 17:48 عصر
نقاط انتخابی شما همیشه در راس هستند؟ یعنی بالاترین راست ترین، بالاترین چپ ترین، پایین ترین چپ ترین، پایین ترین راست ترین؟
اگه اینه که کدنویسیش کار ی نداره و اگه این نیست تمایل داشتید صورت مسئله را با جزئیات بیشتری شرح بدید ممنون میشم



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

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

golbafan
دوشنبه 22 تیر 1394, 18:12 عصر
1- آخرین نقطه ای رو که بدست میارید رو فاصله اش رو با تمام نقاط مقایسه کنید تا دورترین نقطه رو بدست بیارید

2- یک خط فرضی بین این دو نقطه دور از هم ایجاد کنید

3- نقاطی رو که کمترین فاصله ممکن با این خط فرضی رو دارن بدست بیارید

4- این نقاط بدست آمده را به هم وصل کنید

133215

برای انجام این پروژه باید محاسبه فاصله بن دو نقطه و همچنین محاسبه فاصله نقطه از خط رو بلد باشید
https://fa.wikipedia.org/wiki/%D9%81%D8%A7%D8%B5%D9%84%D9%87

safa55
سه شنبه 23 تیر 1394, 10:03 صبح
1- آخرین نقطه ای رو که بدست میارید رو فاصله اش رو با تمام نقاط مقایسه کنید تا دورترین نقطه رو بدست بیارید 2- یک خط فرضی بین این دو نقطه دور از هم ایجاد کنید 3- نقاطی رو که کمترین فاصله ممکن با این خط فرضی رو دارن بدست بیارید 4- این نقاط بدست آمده را به هم وصل کنید 133215 برای انجام این پروژه باید محاسبه فاصله بن دو نقطه و همچنین محاسبه فاصله نقطه از خط رو بلد باشید https://fa.wikipedia.org/wiki/%D9%81%D8%A7%D8%B5%D9%84%D9%87 دوست عزیز ممنون بابت مطلبتون. من تا الان سعی کردم کلیه روشها و مشکلاتی که برای این کار پیش می اید را بررسی کنم. و اگر به نتیجه ای برسم که قابل درک باشد آن را عملی کنم. قبلا نیز گفته ام که موقعیت نقطه پایانی تعیین کننده این است که خطی که از این نقطه رسم خواهد شد به کدام سمت کشیده شود حتما هم دورترین نقطه نخواهد بود. فرض کنید که همین نقطه پایانی در سمت راست وسط قرار دارد ، بس باید خط به آخرین نقطه ای که در امتداد وسط وجود دارد رسم شود که امکان دارد آخرین نقطه در وسط صفحه باشد و به سمت چپ نرسد و همچنین نقاطی در سمت چپ بالا و سمت چپ پایین باشند که دور تین نقاط به نقطه آخر (همان نقطه ای که ازش باید خط کشیده شود) باشند و نیازی نیست که به آنان خط کشیده شود. مشکل من همین جاست که چطوری نسبت به نقطه آخر موقعیت نقطه ای که باید خط کشیده شود را پیدا کنم. مثال: فرض کنید شما در شمال غرب هستید باید مسیری به آخرین شهر جنوب شرق پیدا کنید ،امکان دارد آخرین شهر به سمت جنوب شرق در وسط کشور باشد و بعد آن شهری وجود نداشته باشد. بس همیشه دور ترین شهر ملاک نیست بلکه جهت شهر ملاک است. انشااله که گویا باشد.

rahnema1
سه شنبه 23 تیر 1394, 16:53 عصر
مختصات نقاط که دارید
ابتدا شما میانگین مختصات نقاط را به دست بیارید که مرکز این نقاط پیدا بشه با رنگ قرمز مشخص شده
سپس لازمه محدوده نقاط را به دست بیارید که بهش میگن convex hull
برای convex hull تعدادی برنامه به زبان سی شارپ هست که می تونید از اینترنت پیدا کنید
از نقطه ابتدایی A خطی به سمت مرکز وصل می کنیم و تا محدوده convex hull ادامه می دهیم
محل برخورد خط با covex hull را مشخص نموده و نزدیکترین نقطه را به آن پیدا می کنیم که همان نقطه B خواهد بود
حالا از همون روشی که در پست بالا توضیح دادم سایر نقاط را پیدا کنید
دو مثال زیر را ملاحظه بفرمایید
133242
133243

DOT DARK
سه شنبه 23 تیر 1394, 21:44 عصر
فکر کنم شما به الگوریتمی مثل Artificial bee colony (کلونی زنبور عسل) یا الگوریتم کلونی مورچگان نیاز داشته باشید.