PDA

View Full Version : تشحیص خط



lord_viper
یک شنبه 20 بهمن 1387, 16:49 عصر
با استفاده از canvas روی یک image یک سری خطوط رسم میکنیم
وقتی روی مکانی تو این image کلیک میشه
میخواهیم تشخیص بدیم ایا روی خط کلیک شده یا نه
با تشکر

Zahed2008
دوشنبه 21 بهمن 1387, 07:43 صبح
سلام، دو پیشنهاد براتون دارم:
1- با گرفتن رنگ نقطه مورد نظر ( دستور pixel ) و داشتن رنگ زمینه و تفاوت آنها تشخیص بده، که این کار در صورتی که خطوط خیلی نازک باشند برای کابر سختی کلیک کردن بطور دقیق روی خط رو به همراه می آره.
2- در صورتی که خطوط از ابتدا روی image نبوده و بعدا توسط کاربر ترسیم می شه، بهتره که معادله خطوط رو با داشتن مختصات ابتدا و انتها بدست بیاری و محدوده 5+ و 5- خطوط رو جزء خط در نظر بگیری. ( یادت باشه شیب خط یه عدد single بوده و integer نیست).



var m,error : singlr;
...
m := (y1-y0)/(x1-x0); // single parameter
error := y-y0 + m*(x-x0);
if abs( error ) < 5 then ....

lord_viper
دوشنبه 21 بهمن 1387, 10:59 صبح
ممنون از لطفتون
خطها از رنگهای مختلف تشکیل شده البته من از اختلاف پس زمینه استفاده کردم و این مورد حل شد و مورد دیگه ای که هست وقتی رو خط کلیک شد چطور میشه خط رو پیمایش کرد و سر و ته خط رو تشخیص داد؟
با تشکر

Zahed2008
چهارشنبه 23 بهمن 1387, 08:50 صبح
سلام، این کار در صورتی که ضخامت خطوط یکسان باشه، برات آسون تره وگرنه باید ابتدا ضخامت خط مورد نظر رو با تشکیل یک مربع اطراف نقطه مورد نظر بدست بیاری (روش افزایش تدریجی قطر مربع). بعد از این کار با تعیین نقاط وسط ضخامت خط در دو طرف مربع شیب اون خط رو بدست بیاری. با افزایش مربع به مرکزیت نقطه کلیک شده و تعیین لحظه ای شیب خط، هرجا که شیب تغییر کرد، انتها یا ابتدای خط رو بدست میآری. باید این الگوریتم رو اینقدر ادامه بدی تا هر دو نقطه رو بدست بیاری. چون ممکنه هر دو همزمان بدست نیاد.
راستی معادله خط رو اشتباه نوشته بودم ، که نتونستم تصحیح کنم. دوباره می نویسم:

error := y-y0 -m*(x-x0)

lord_viper
چهارشنبه 23 بهمن 1387, 10:48 صبح
این کار برای خطوط صاف راحته ولی برای خطوط منحنی دردسر سازه برای خصوص منحنی چی پیشنهاد میکنین؟

Zahed2008
چهارشنبه 23 بهمن 1387, 16:27 عصر
سلام، این کار یه خورده سخت تره. من برای این کار، الگوریتم مورچگان با تعیین لحظه ای رنگ زمینه یا کار با شبکه عصبی رو پیشنهاد می دم.