نمایش نتایج 1 تا 6 از 6

نام تاپیک: کار روی نقشه

  1. #1

    کار روی نقشه

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

  2. #2

    نقل قول: کار روی نقشه

    دوستان راهنمایی کنید

  3. #3

    نقل قول: کار روی نقشه

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

  4. #4

    نقل قول: کار روی نقشه

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    نمیدونم تحت چی برنامه می نویسید، ولی نقشه زمین اگر بصورت GraphicsPath یا یک آرایه از Point ها داشته باشید می توانید با Clip کردن ترسیم (یکجور Mask) افقی یا عمودی تقسیم اش کنید و اون درصد از نقشه رو یک رنگ دیگه بکنید.
    ممنون از پاسخگویی برنامه پیشنهادیتون چی هست
    فایل نقشه به صورت cad هستش
    برای clip کردن با چی کار میشه کرد

  5. #5

    نقل قول: کار روی نقشه

    دوستان راهنمایی کنید

  6. #6

    نقل قول: کار روی نقشه

    نقل قول نوشته شده توسط amintt مشاهده تاپیک
    دوستان راهنمایی کنید
    نقشه شما در اتوکد تشکیل شده از یکسری نقاط که تشکیل یک چند ضلعی نامنتظم رو میده. مثلا :

    private List<PointF> _points = new List<PointF>();

    private void Form1_Load(object sender, EventArgs e)
    {
    _points.Add(new PointF(109, 125));
    _points.Add(new PointF(249, 67));
    _points.Add(new PointF(367, 103));
    _points.Add(new PointF(423, 217));
    _points.Add(new PointF(373, 259));
    _points.Add(new PointF(416, 333));
    _points.Add(new PointF(261, 355));
    _points.Add(new PointF(142, 292));
    }

    area01.png
    و محاسبه مساحت یک چند ضلعی نامنتظم که نقاط اش مشخصه هم فرمول ساده ای داره :

    private static float CalcArea(List<PointF> points)
    {
    if (points.Count < 3)
    {
    return 0;
    }
    var area = points[points.Count - 1].X * points[0].Y - points[points.Count - 1].Y * points[0].X;
    for (var i = 0; i < points.Count - 1; i++)
    {
    area += points[i].X * points[i + 1].Y - points[i].Y * points[i + 1].X;
    }
    return area / 2f;
    }


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

    private static List<PointF> GetPercentagePoints(List<PointF> points, int percentage)
    {
    var minX = points[0].X;
    var maxX = points[0].X;
    for (var i = 1; i < points.Count; i++)
    {
    if (points[i].X < minX)
    {
    minX = points[i].X;
    }
    else if (points[i].X > maxX)
    {
    maxX = points[i].X;
    }
    }
    var fullArea = CalcArea(points);
    var output = new List<PointF>();
    while (minX < maxX)
    {
    var x = (minX + maxX) / 2f;
    output.Clear();
    var prevIndex = points.Count - 1;
    for (var i = 0; i < points.Count; i++)
    {
    if (points[i].X <= x)
    {
    output.Add(points[i]);
    }
    else
    {
    if (points[prevIndex].X <= x)
    {
    var delta = (points[i].Y - points[prevIndex].Y) / (points[i].X - points[prevIndex].X);
    output.Add(new PointF(x, delta * (x - points[prevIndex].X) + points[prevIndex].Y));
    }
    var nextIndex = (i + 1) % points.Count;
    if (points[nextIndex].X <= x)
    {
    var delta = (points[nextIndex].Y - points[i].Y) / (points[nextIndex].X - points[i].X);
    output.Add(new PointF(x, delta * (x - points[i].X) + points[i].Y));
    }
    }
    prevIndex = (prevIndex + 1) % points.Count;
    }
    var area = CalcArea(output);
    if (100f * area / fullArea > percentage)
    {
    maxX = x - 1;
    }
    else
    {
    minX = x + 1;
    }
    }
    return output;
    }

    area02.png

    برای رسم به مثال پیوستی مراجعه کنید :
    AreaPercentage.rar

تاپیک های مشابه

  1. پاسخ: 1
    آخرین پست: چهارشنبه 11 خرداد 1401, 19:00 عصر
  2. سوال: تغییر رنگ پس زمینه زیر منوی بوت استرپ هنگام بردن موس روی آن
    نوشته شده توسط manit44 در بخش طراحی وب (Web Design)
    پاسخ: 8
    آخرین پست: یک شنبه 26 دی 1395, 17:32 عصر
  3. پاسخ: 3
    آخرین پست: سه شنبه 22 بهمن 1392, 11:11 صبح
  4. پاسخ: 0
    آخرین پست: شنبه 07 اردیبهشت 1392, 15:58 عصر
  5. پاسخ: 4
    آخرین پست: چهارشنبه 08 تیر 1390, 22:07 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •