تبلیغات :
خرید لپ تاپ استوک
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 15

نام تاپيک: پر كردن يك بيضي

  1. #1
    داره خودمونی میشه
    تاريخ عضويت
    Mar 2007
    پست ها
    195

    پيش فرض پر كردن يك بيضي

    سلام

    چطوري مي تونيم كه يك بيضي كشيده شده را با يك رنگ خاص پر كرد كه بيضي به اون رنگ پر شده ديده شود؟

    كشيدن بيضي مشكل من نيست فقط مي خوام بدونم چطوري اون را پر كنم من خودم فكر مي كنم كه بايد بيضي هاي متحد المركزي بكشم و اون را پر كنم ولي چطوري درون و خارج بيضي زا تشخيص بدم؟

    از كجا بدونم الان تابع putpixel ي كه بكار مي برم داره بيرون بيضي را پر مي كنه يا داخل اون رو

    در حقيقت چطوري كد بنويسم كه تابع putpixel فقط درون بيضي بكار بيفته ؟ و نقاط را روشن كنه

    لطفا راهنمايي كنيد
    مرسي.

  2. #2
    داره خودمونی میشه palizesoftware's Avatar
    تاريخ عضويت
    Sep 2005
    محل سكونت
    Usa
    پست ها
    190

    پيش فرض

    الگوريتم‌هاي مختلفي هست براي پر كردن يك شكل
    در اين ميان ميتونيد از روش همسايگي استفاده كنيد كه با داشتن يك نقطه درون يك شكل بسته، شروع به پر كردن كنيد و 8 مكان اطراف همين نقطه رو كنكاش كنيد و تابع پر كردن رو بصورت بازگشتي صدا بزنيد.
    چون با سر ريز stack مواجع ميشيد پس بايد يه استك هم پياده‌سازي بكنيد.
    يك توضيح و اينكه براي پر كردن، با دادن نقطه شروع رنگ‌آميزي اقدام به پر كردن كنيد تا اينكه به رنگي برسيد كه با رنگ اولين نقطه يكسان نباشد

  3. #3
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    سلام.
    ممنون از توضیحات دوستمون.البته زیاد سخت گرفتن! روش پیشنهادی نزدیک به Image Processing بود.
    لازم نیست از تابع putpixel استفاده کنین. (اگه حتما باید با putpixel انجام بدین , بگید)
    نمیدونم برای رسم یک بیضی از تابع ellipse استفاده کردین یا اینکه خودتون کدی رو برای پیاده سازیش
    نوشتین. در هر دوصورت ellipese ی که رسم کردین دو تا شعاع داره. درسته؟ کافیه شما شروع به رسم
    ellipse هایی کنین که از مقدار دو شعاع یکی یکی کم میشن تا به صفر برسن. به این صورت ellipse شما
    پر میشه. (گرچه میتونین مستقیما از fillellipse استفاده کنین. که مستقیما یک ellipse تو پر رسم میکنه.)
    نمونه ی زیر میتونه منظورم رو واضحتر بیان کنه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اگه مشکلی بود اطلاع بدین.

  4. این کاربر از someone بخاطر این مطلب مفید تشکر کرده است


  5. #4
    داره خودمونی میشه palizesoftware's Avatar
    تاريخ عضويت
    Sep 2005
    محل سكونت
    Usa
    پست ها
    190

    پيش فرض

    كدي رو كه دوستمون آوردند براي پر كردن شكل بصورت دواير متحدالمركز هست. منتها توضيحات من جهت پر كردن هر شكلي قابل پياده‌سازي هست كه نمونه ‌اش رو برات آپلود كردم. اين پروژه مربوط به درس گرافيك كامپيوتري بود كه سالها پيش نوشته بودم و رسم پيكسل هم با توابع و اينتراپت‌هاي اسمبلي انجام شده بود.
    بخش پر كردن شكل اينطوري هست:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

  6. #5
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    دوباره سلام.
    ممنون از کدتون اما من نتونستم بگیرمش. امکان داره جایی دیگه اونرو up کنین؟
    ضمنا در نمونه ای که گذاشتین نقش mousepos چیه؟
    متاسفانه همونطور که گفتم به کدتون دسترسی ندارم.

  7. #6
    داره خودمونی میشه
    تاريخ عضويت
    Mar 2007
    پست ها
    195

    پيش فرض تشكر و.......

    سلام
    از كاربر someone وpalizesoftware ممنون

    جواب كاربر someone براي من راحتر بود ولي چون شعاع ها و نقاط مركزي را از كابر مي گرفتم تغييرش دادم

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اما راه كاربرpalize software بهتره چون به درد هر شكلي مي خوره ولي من تابع mouse.... را در هلپ گشتم پيدا نكردم و در ضمن clipx2 و clipex2 ....... براي چيه هستن؟

    اگه كمكم كنيد فكر كنم كه راه خودم بهتر باشه
    راه من:

    مثلا برنامه طوري باشه(پر كردن يك poligan ) كه نقاطي را از يك كاربر دريافت كنه و شكل ان را رسم كنه و بعد ان را پر كنه اينطوري كه خطوط كشيده شده توسط نقاط را جايي ذخيره كنيم (كه اين كار رو نمي دونم چه طوري انجام بدم) بعد نقاط را يكي يكي روي محور ايكس پيمايش كنه ولي روشن نكنه تا به نقطه اي برسه كه روي يكي از خطوط ذخيره شده صدق كنه از اين به بعد نقاط را روشن كنه تا اينكه به خط بعدي برسه از اين به بعد دوباره فقط پيمايش كنه و روشن نكنه

    ولي نمي دونم چطوري پياده كنم
    لطفا راهنمايي كنيد
    مرسي

  8. #7
    داره خودمونی میشه palizesoftware's Avatar
    تاريخ عضويت
    Sep 2005
    محل سكونت
    Usa
    پست ها
    190

    پيش فرض

    سلام
    كل كد رو اينجا ميذارم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اون تابع MousePos هم براي نشون دادن موقعيت ماوس هست كه تعريف شده
    براي راه‌حلي هم كه آرام ميخواد پياده كني ميتوني خيلي راحت از يه آرايه از نوع استراكچر دو عضوي استفاده كني كه به ازاي هر كليك يه انديس جلو بري و موقيت ماوس رو ذخيره كني تا اينكه به نقطه شروع برسي يا كاربر كليك راست كنه و نقطه آخر رو به اول وصل كني. در ضمن اين كد شامل رسم خط و مستطيل و دايره و ... هم هست كه ميتونه كمكت كنه. تابع پر كردن هم ممكنه اشكالاتي توي سطوح خيلي بزرگ داشته باشه كه فرصت نكردم اصلاحش كنم. بهر حال اميدوارم كمكت كنه
    Last edited by palizesoftware; 01-04-2007 at 01:35.

  9. #8
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    دوباره سلام.
    برای رسم یه polygon میتونید از برنامه زیر استفاده کنین:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    یک struc داریم که مختصات x,y رو در خودش ذخیره میکنه.برای رسم polygon هم کافیه در ابتدا به اولین
    نقطه حرکت کنیم و به نقطه ی بعدی خط رسم کنیم. در پایان هم از آخرین مختصات به مختصات آغازین خطی
    رسم میکنیم. نمونه ساده ای هست.
    اما در مورد پرکردنش و روشی که شما پیشنهاد دادین:
    با استفاده از یه حلقه pixel به pixel محور افقی رو جاروب میکنیم و با استفاده از getpixel مقدار رنگ نقطه ی
    مورد نظر رو بدست میاریم. هر وقت به اولین نقطه ی سفید رسیدیم با استفاده از putpixel یک نقطه ی
    سفید رسم میکنیم و دوباره رنگ نقطه ی بعدی رو مقایسه میکنیم اگه سیاه بود دوباره از putpixel استفاده
    میکنیم. و اگه سفید بود یعنی به انتها رسیدیم. بعد از اتمام مقدار محور عمودی رو یکی زیاد میکنیم و دوباره
    عملیات رو انجام میدیم. تا کل صفحه رو scan کنیم. سعی کنین برنامه رو بنویسن. اگه به مشکل بر خوردین
    اطلاع بدین.
    اما روش زیاد سنجیده ای نیست. فرض کنین که screen شما 480*640 باشه. یعنی 307200 جستجو .
    البته این مقدار max هست. بستگی داره که شکل در کجا باشه. هر چی از مرکز مختصات دورتر باشه جستجو
    به عدد مورد نظر نزدیک تر میشه. وزمان زیادی میبره.

  10. #9
    داره خودمونی میشه
    تاريخ عضويت
    Mar 2007
    پست ها
    195

    پيش فرض يه راه ديگه

    سلام
    دوست دارم كه راه شما (كاربرsomeone ) راهم براي پر كردن يك polygon بدونم

    مرسي

  11. #10
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    دوباره سلام.
    همون که دوستمون گفتن به طور کلی دو روش برای Fill کردن اشکال وجود داره.
    1- Boundary Fill Algorithm
    2- Scan line polygon fillling Algorithm
    در مورد روش اول که دوستون توضیحش رو دادن. و یه نمونه از اون گذاشتن. (8 تایی)
    اگه نظر من رو بخواید روش خیلی خوبی هست و خیلی ساده میشه پیادش کرد.
    نمونه ای دوستمون گذاشتن رو با کمی تغییر براتون میذارم :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    می بینید که کد خیلی ساده ای هست. به این صورت میتونین ازش استفاده کنین:
    x,y مختصات نقطه ای از درون polygon هست. fill مقدار رنگ مورد نظرتون و bound مقدار رنگ مرز های
    polygon هست. اگه مشکلی پیش اومد اطلاع بدین.

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •