PDA

View Full Version : اصلاح نقاط ترسیمی چهارضلعی



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

131071

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

RmeXXXXXXXXX
یک شنبه 20 اردیبهشت 1394, 21:45 عصر
ساده است: توی آرایه ات دنبال چهار نقطه بگرد:
1- اونی که کوچکترین xوy رو داره
2- اونی که کوچکترین x و بزرگترین y رو داره
3- اونی که بزرگترین x و کوچکترینy رو داره
4- اونی که بزرگترین xوy را داره
حالا این چهارتا نقطه رو بهم وصل کن!

golbafan
یک شنبه 20 اردیبهشت 1394, 22:40 عصر
ساده است: توی آرایه ات دنبال چهار نقطه بگرد:
1- اونی که کوچکترین xوy رو داره
2- اونی که کوچکترین x و بزرگترین y رو داره
3- اونی که بزرگترین x و کوچکترینy رو داره
4- اونی که بزرگترین xوy را داره
حالا این چهارتا نقطه رو بهم وصل کن!

اونقدر ها هم ساده نیست آ
این چهار نقطه که شما میگین در اغلب موارد یک ذوذنقه تولید میکنن:

131091


راه صحیحش استفاده از کلاسیفای کردنه. مثلا با الگوریتم KNN
جستجو کنید و اگر نیافتید مجدد اینجا بپرسید

ali_72
دوشنبه 21 اردیبهشت 1394, 07:14 صبح
ساده است: توی آرایه ات دنبال چهار نقطه بگرد:
1- اونی که کوچکترین xوy رو داره
2- اونی که کوچکترین x و بزرگترین y رو داره
3- اونی که بزرگترین x و کوچکترینy رو داره
4- اونی که بزرگترین xوy را داره
حالا این چهارتا نقطه رو بهم وصل کن!

ممنون دوست عزیز
این کار در مورد اشکال لوزی مانند کار نمیکنه
فقط در مورد مستطیله
میشه در مورد لوزی هم چنین کار مشابه (در نظر گرفتن min,max x,y) را کرد ولی برای اشکال لوزی و مستطیل مانند با هم متفاوت میشه
من از کجا متوجه شم که این نقاط تشکیل لوزی میده یا یه مستطیل
و اینکه من کلا چند ضلعی دارم یعنی میتونه مستطیل نباشه لوزی نباشه (اما 4 ضلعی هست حتما)
یعنی مطمئنا میشه قطرهای این 4 ضلعی با هم برابر نباشه
چون من دقیقا باید قطرهای این 4 ضلعی رو محاسبه کنم بدست آوردن گوشه ها برای من اهمیت زیادی داره

ali_72
دوشنبه 21 اردیبهشت 1394, 07:16 صبح
اونقدر ها هم ساده نیست آ
این چهار نقطه که شما میگین در اغلب موارد یک ذوذنقه تولید میکنن:

131091


راه صحیحش استفاده از کلاسیفای کردنه. مثلا با الگوریتم KNN
جستجو کنید و اگر نیافتید مجدد اینجا بپرسید
ممنون دوست عزیز
من تصویر خوبی نذاشته بودم. دقیقا باید تصویر قرمزی که شما کشیدی رو به من بده
در این صورت هم
الگوریتم KNN باید استفاده شه؟

ali_72
دوشنبه 21 اردیبهشت 1394, 11:23 صبح
ممنون میشم راهنمایی کنید

golbafan
دوشنبه 21 اردیبهشت 1394, 12:01 عصر
ممنون دوست عزیز
من تصویر خوبی نذاشته بودم. دقیقا باید تصویر قرمزی که شما کشیدی رو به من بده
در این صورت هم
الگوریتم KNN باید استفاده شه؟



نه حالا که شما خطوط قرمز رو نیاز دارید دیگه کاری با knn ندارید
من اولش فکر کردم که دقیقا خود مستطیل مد نظر شما هست

ولی برای بدست آوردن خطوط قرمز شما 2 تا راه دارید:
1- باید آرایه خودتون رو از لحاظ x ها به دو بخش مساوی تقسیم کنید و y هها رو هم همینطور
بعد با استفاده از مشتق نقاط موجود در این بخش ها میتونید لبه های انتهایی رو پیدا کنید
131106

این روش سریعتر است جون عملیات کمتری نیاز دارد

golbafan
دوشنبه 21 اردیبهشت 1394, 12:34 عصر
راه دوم اینه که خطوط فاصله رو بین نقاط ایجاد کتید و اونهایی که بیشترین فاصله رو ایجاد میکنند به عنوان نقاط لبه در نظر بگیرید (چون اونها قطر هستند)

131109

این کار رو باید واسه همه نقاط تکرار کنید تا 2 تا قطر بدست بیاد

ali_72
دوشنبه 21 اردیبهشت 1394, 12:39 عصر
نه حالا که شما خطوط قرمز رو نیاز دارید دیگه کاری با knn ندارید
من اولش فکر کردم که دقیقا خود مستطیل مد نظر شما هست

ولی برای بدست آوردن خطوط قرمز شما 2 تا راه دارید:
1- باید آرایه خودتون رو از لحاظ x ها به دو بخش مساوی تقسیم کنید و y هها رو هم همینطور
بعد با استفاده از مشتق نقاط موجود در این بخش ها میتونید لبه های انتهایی رو پیدا کنید
131106

ممنون دوست عزیزم
چطور x ها و y ها رو به 2 بخش مساوی تقسیم کنم؟

ali_72
دوشنبه 21 اردیبهشت 1394, 12:40 عصر
راه دوم اینه که خطوط فاصله رو بین نقاط ایجاد کتید و اونهایی که بیشترین فاصله رو ایجاد میکنند به عنوان نقاط لبه در نظر بگیرید (چون اونها قطر هستند)

131109

این کار رو باید واسه همه نقاط تکرار کنید تا 2 تا قطر بدست بیاد

ممنون
لینک ضمیمه درست نبود
بیشتر با مثال توضیح میدی؟
من کامل متوجه نشدم

ali_72
سه شنبه 22 اردیبهشت 1394, 07:20 صبح
چطور
آرایه رو از لحاظ x ها به دو بخش مساوی تقسیم کنم؟

golbafan
چهارشنبه 23 اردیبهشت 1394, 08:51 صبح
چطور
آرایه رو از لحاظ x ها به دو بخش مساوی تقسیم کنم؟


برای تقسیم آرایه باید اون رو بر اساس x سورت کرده و نصف آن را بردارید
حالا میتونید نصف بالا یا نصف پایین رو بردارید
برای تقسیم آرایه بر حسب y نیز باید اون رو بر اساس y سورت کرده و نصف آن را بردارید


ممنون
لینک ضمیمه درست نبود
بیشتر با مثال توضیح میدی؟
من کامل متوجه نشدم
اینم عس ضمیمه ای که گفتم:
این روش یکم سخت تره ولی دقتش بالاتره:
131183

این الگوریتم رو باید برای همه نقاط انجام بدید

golbafan
چهارشنبه 23 اردیبهشت 1394, 09:02 صبح
روش سوم:
استفاده از تغییرات شیب : (بهترین روش) (قابل استفاده برای 3 ضلعی الی 8 ضلعی)

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

131184

ali_72
چهارشنبه 23 اردیبهشت 1394, 11:50 صبح
برای تقسیم آرایه باید اون رو بر اساس x سورت کرده و نصف آن را بردارید
حالا میتونید نصف بالا یا نصف پایین رو بردارید
برای تقسیم آرایه بر حسب y نیز باید اون رو بر اساس y سورت کرده و نصف آن را بردارید


اینم عس ضمیمه ای که گفتم:
این روش یکم سخت تره ولی دقتش بالاتره:
131183

این الگوریتم رو باید برای همه نقاط انجام بدید

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

131186


این هم کد من:


Point[] bigpoint = new Point[4]; bigpoint[0] = arraypoints[0];
bigpoint[1] = arraypoints[1];
bigpoint[2] = arraypoints[2];
bigpoint[3] = arraypoints[3];
double maxfaselebeyne2point;
double fasele = 0;
Point point2 = arraypoints[0];
foreach (var p1 in arraypoints)
{
maxfaselebeyne2point = 0;
foreach (var pn in arraypoints)
{
fasele = Math.Sqrt(Math.Pow((Math.Abs(pn.Y - p1.Y)), 2) + Math.Pow((Math.Abs(pn.X - p1.X)), 2));
if (fasele > maxfaselebeyne2point)
{
maxfaselebeyne2point = fasele;
point2 = pn;
}
}
if (Math.Sqrt(Math.Pow((Math.Abs(bigpoint[1].Y - bigpoint[0].Y)), 2) + Math.Pow((Math.Abs(bigpoint[1].X - bigpoint[0].X)), 2)) < maxfaselebeyne2point)
{
bigpoint[2] = bigpoint[0];
bigpoint[3] = bigpoint[1];


bigpoint[0] = p1;
bigpoint[1] = point2;

}
}

ببخشید که کد من تر و تمیز و بهینه نیست صرفا جهت مثال نوشتم که ببینم جواب میگیرم یا نه
ممنون میشم راهنمایی کنید

ali_72
چهارشنبه 23 اردیبهشت 1394, 11:57 صبح
روش سوم:
استفاده از تغییرات شیب : (بهترین روش) (قابل استفاده برای 3 ضلعی الی 8 ضلعی)

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

131184

ممنون دوست عزیزم
تغییرات شیب برای point هایی که من دارم قابل استفاده هست؟ در واقع من همیشه تغییر شیب دارم چون پوینت های من تشکیل خط راست نمیده
این باعث میشه که دقت تشخیص گوشه چهارضلعی کم شه.
من فقط 4ضلعی دارم

ali_72
چهارشنبه 23 اردیبهشت 1394, 13:58 عصر
با استفاده از کد زیر تونستم راس های چهارضلعی در حالتیکه مثل مستطیل است (دو راس در بالا و دو راس در پایین) رو بدست بیارم
ولی کد من برای حالتیکه شبیه لوزی باشه کار نمیکنه (یک راس در بالا و یک راس در پایین
ممنون میشم اگه ایداه ای برای تغییر کد دارید به صورتیکه در هر دو حالت پاسخگو باشه
ممنون



private static void GetMinMaxCorners(List<Point> points, ref Point ul, ref Point ur, ref Point ll, ref Point lr) {
ul = points[0];
ur = ul;
ll = ul;
lr = ul;


foreach (Point pt in points)
{
if (-pt.X - pt.Y > -ul.X - ul.Y) ul = pt;
if (pt.X - pt.Y > ur.X - ur.Y) ur = pt;
if (-pt.X + pt.Y > -ll.X + ll.Y) ll = pt;
if (pt.X + pt.Y > lr.X + lr.Y) lr = pt;
}


g_MinMaxCorners = new Point[] { ul, ur, lr, ll };
}

rahnema1
چهارشنبه 23 اردیبهشت 1394, 15:45 عصر
سلام
یک روش اینه که ابتدا نقاط تشکیل دهنده لوزی کج و کوله را در جایی مثل لیست یا لیست پیوندی ذخیره کنید به طوری که نقاط، ترتیب خودشون را همون طور که در شکل دیده می شه داشته باشند. مثلا 100 تا نقطه به دست میاد.
سپس از بین اینها 4 نقطه انتخاب می کنیم مثلا نقطه 1 و 25 و 50 و 75 که ترتیب اینها هم باید حفظ بشه و به ترتیب در یک لیست جدید قرار می دهیم
حالا باید فاصله بین 1و25 وبین 25 و 50 و بین 50 و 75 و بین 75 و 1 را به عنوان چهار ضلعی موقتی به دست بیاریم و این اضلاع را باهم جمع کنیم
در یک حلقه تکرار شونده 4 نقطه را به سمت راست یا چپ جابجا می کنیم تا مجموع ضلعها حداکثر شود

ali_72
پنج شنبه 24 اردیبهشت 1394, 09:06 صبح
سلام
یک روش اینه که ابتدا نقاط تشکیل دهنده لوزی کج و کوله را در جایی مثل لیست یا لیست پیوندی ذخیره کنید به طوری که نقاط، ترتیب خودشون را همون طور که در شکل دیده می شه داشته باشند. مثلا 100 تا نقطه به دست میاد.
سپس از بین اینها 4 نقطه انتخاب می کنیم مثلا نقطه 1 و 25 و 50 و 75 که ترتیب اینها هم باید حفظ بشه و به ترتیب در یک لیست جدید قرار می دهیم
حالا باید فاصله بین 1و25 وبین 25 و 50 و بین 50 و 75 و بین 75 و 1 را به عنوان چهار ضلعی موقتی به دست بیاریم و این اضلاع را باهم جمع کنیم
در یک حلقه تکرار شونده 4 نقطه را به سمت راست یا چپ جابجا می کنیم تا مجموع ضلعها حداکثر شود


ممنونممممم

ali_72
پنج شنبه 24 اردیبهشت 1394, 12:14 عصر
سلام
یک روش اینه که ابتدا نقاط تشکیل دهنده لوزی کج و کوله را در جایی مثل لیست یا لیست پیوندی ذخیره کنید به طوری که نقاط، ترتیب خودشون را همون طور که در شکل دیده می شه داشته باشند. مثلا 100 تا نقطه به دست میاد.
سپس از بین اینها 4 نقطه انتخاب می کنیم مثلا نقطه 1 و 25 و 50 و 75 که ترتیب اینها هم باید حفظ بشه و به ترتیب در یک لیست جدید قرار می دهیم
حالا باید فاصله بین 1و25 وبین 25 و 50 و بین 50 و 75 و بین 75 و 1 را به عنوان چهار ضلعی موقتی به دست بیاریم و این اضلاع را باهم جمع کنیم
در یک حلقه تکرار شونده 4 نقطه را به سمت راست یا چپ جابجا می کنیم تا مجموع ضلعها حداکثر شود

ممنون
تست کردم
از الگوریتم های قبلی بهتر بود ولی درصد خطا هم داشت

این کد من برای چهارضلعی در حالتیکه مستیل شکل باشه دقت خیلی بالاتری داره


private static void GetMinMaxCorners(List<Point> points, ref Point ul, ref Point ur, ref Point ll, ref Point lr) {
ul = points[0];
ur = ul;
ll = ul;
lr = ul;


foreach (Point pt in points)
{
if (-pt.X - pt.Y > -ul.X - ul.Y) ul = pt;
if (pt.X - pt.Y > ur.X - ur.Y) ur = pt;
if (-pt.X + pt.Y > -ll.X + ll.Y) ll = pt;
if (pt.X + pt.Y > lr.X + lr.Y) lr = pt;
}


g_MinMaxCorners = new Point[] { ul, ur, lr, ll };
}

این هم کد من برای الگوریتم شما:

int countofarray = arraypoints.Count; double[] listmohit=new double[countofarray];

for (int i = 0; countofarray > i + (int)(0.75 * countofarray); i++)


double p01 =
Math.Sqrt(Math.Pow((Math.Abs(arraypoints[i + (int)(0.25 * countofarray)].Y - arraypoints[i].Y)), 2) +
Math.Pow((Math.Abs(arraypoints[i + (int)(0.25 * countofarray)].X - arraypoints[i].X)), 2));


double p12 =
Math.Sqrt(Math.Pow((Math.Abs(arraypoints[i + (int)(0.5 * countofarray)].Y - arraypoints[i + (int)(0.25 * countofarray)].Y)), 2) +
Math.Pow((Math.Abs(arraypoints[i + (int)(0.5 * countofarray)].X - arraypoints[i + (int)(0.25 * countofarray)].X)), 2));


double p23 =
Math.Sqrt(Math.Pow((Math.Abs(arraypoints[i + (int)(0.75 * countofarray)].Y - arraypoints[i + (int)(0.5 * countofarray)].Y)), 2) +
Math.Pow((Math.Abs(arraypoints[i + (int)(0.75 * countofarray)].X - arraypoints[i + (int)(0.5 * countofarray)].X)), 2));


double p30 =
Math.Sqrt(Math.Pow((Math.Abs(arraypoints[i].Y - arraypoints[i + (int)(0.75 * countofarray)].Y)), 2) +
Math.Pow((Math.Abs(arraypoints[i].X - arraypoints[i + (int)(0.75 * countofarray)].X)), 2));


listmohit[i] = p01 + p12 + p23 + p30;

}
int maxindex = 0;
for (int j = 0; j < countofarray; j++)
{
if (listmohit[j] > listmohit[maxindex])
{
maxindex = j;
}
}
draw(arraypoints[maxindex], arraypoints[maxindex + (int)(0.25 * countofarray)]);
draw(arraypoints[maxindex + (int)(0.25 * countofarray)], arraypoints[maxindex + (int)(0.5 * countofarray)]);
draw(arraypoints[maxindex + (int)(0.5 * countofarray)], arraypoints[maxindex + (int)(0.75 * countofarray)]);
draw(arraypoints[maxindex + (int)(0.75 * countofarray)], arraypoints[maxindex]);





ببخشید که کد من تر و تمیز و بهینه نیست صرفا جهت مثال نوشتم که ببینم جواب میگیرم یا نه
ممنون میشم دوستان راهنمایی کنند تا بهترین الگوریتم پیدا شه

ممنونمممممم

rahnema1
پنج شنبه 24 اردیبهشت 1394, 18:00 عصر
من منظورم این شکل بود:
http://www.sharefile.ir/uploads/1431694863.png
چهار نقطه را جوری روی محیط لوزی می چرخونیم تا بهترین حالت ایجاد بشه که در شکل نهایی مجموع ضلعها حد اکثره دیگه لازم نیست ضربدر 0.75 کنیم بلکه از مختصات نقاط موجود استفاده می کنیم

ali_72
شنبه 26 اردیبهشت 1394, 07:39 صبح
من منظورم این شکل بود:
http://www.sharefile.ir/uploads/1431694863.png
چهار نقطه را جوری روی محیط لوزی می چرخونیم تا بهترین حالت ایجاد بشه که در شکل نهایی مجموع ضلعها حد اکثره دیگه لازم نیست ضربدر 0.75 کنیم بلکه از مختصات نقاط موجود استفاده می کنیم

منظورت رو متوجه شدم ممنون از دقت و توجه شما

ali_72
یک شنبه 27 اردیبهشت 1394, 07:25 صبح
ممنون دوست عزیز
هر چقدر با کدم سر و کله زدم دیدم درست نوشتم

اون قسمت خط آخر مربوط به این مورد هست که من فقط i رو زخیره میکنم
برای ترسیم چهارضلعی به مشخصات سایر نقاط نیز احتیاج دارم چون میدونم که فاصله بین نقاط انتخاب شده من به اندازه 0.25 از تعداد کل نقاط هست پس نقطه دوم میشه i انتخاب شده + 0.25 تعداد کل نقاط و نقطه سوم میشه i انتخاب شده + 0.5 تعدا کل نقاط و نقطه آخر میشه i انتخاب شده + 0.75 تعداد کل نقاط
در واقع نخواستم مختصات هر 4 نقطه رو ذخیره کنم
فقط مختصات اندیس نقطه اول انتخاب شده (که با انتخاب این نقطه محیط ماکزیمم بود) رو ذخیره کردم
ممنون میشم بیشتر راهنمایی کنید

ممنون

ali_72
یک شنبه 27 اردیبهشت 1394, 13:51 عصر
من منظورم این شکل بود:
http://www.sharefile.ir/uploads/1431694863.png
چهار نقطه را جوری روی محیط لوزی می چرخونیم تا بهترین حالت ایجاد بشه که در شکل نهایی مجموع ضلعها حد اکثره دیگه لازم نیست ضربدر 0.75 کنیم بلکه از مختصات نقاط موجود استفاده می کنیم

دوست عزیزم ممنون میشم کد منو اصلاح کنی یا تکه کدی بذاری که متوجه اشتباهم بشم
مثلا من یک آرایه با 34 پوینت دارم که نقاط 8 و 13 و 23 و 31 این آرایه راس های 4 ضلعی من هستند
با کدنویسی فعلی من اصلا چنین چهارضلعی ای تو مقایسه وارد نمیشه :اشتباه:
ممنون

rahnema1
یک شنبه 27 اردیبهشت 1394, 20:32 عصر
ابتدا لازمه دو نقطه ای که بیشترین فاصله را از هم دارند پیدا کنیم
برای این کار یک نقطه دلخواه از لوزی انتخاب می کنیم به نام A
در بین نقاط لوزی نقطه ای که بیشترین فاصله از A را دارد پیدا می کنیم به نام B
سپس در بین نقاط لوزی نقطه ای که بیشترین فاصله از B را دارد پیدا می کنیم به نام C
همین جور ادامه می دهیم حداکثر تا 3 یا 4 بار که دو نقطه ای که بیشترین فاصله از هم دارند پیدا می شوند
http://www.sharefile.ir/uploads/1431905904.png
دو نقطه دیگه لازم داریم
بین دو نقطه ای که داریم نقطه ای را پیدا می کنیم که مجموع فاصله بین نقطه پیدا شده با دو نقطه ما حد اکثر باشه مثلا M
همین طور نقطه N را هم پیدا می کنیم
در نتیجه 4 نقطه پیدا میشن
اما اگه می خواهید خیلی دقیقتر باشه بهتره مجموع 4 ضلع را حساب کنید و 4 نقطه را کمی جابجا کنید شاید حداکثر مجموع 4 ضلع در فاصله یکی دو نقطه اون ور تر باشه !! :)
http://www.sharefile.ir/uploads/1431974129.png

ali_72
دوشنبه 28 اردیبهشت 1394, 07:42 صبح
اما اگه می خواهید خیلی دقیقتر باشه بهتره مجموع 4 ضلع را حساب کنید و 4 نقطه را کمی جابجا کنید شاید حداکثر مجموع 4 ضلع در فاصله یکی دو نقطه اون ور تر باشه !! :)
http://www.sharefile.ir/uploads/1431974129.png

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

golbafan
دوشنبه 28 اردیبهشت 1394, 10:11 صبح
محاسبه بیشترین مساحت رو هم چک کن
فکر کنم جواب بده

ali_72
دوشنبه 28 اردیبهشت 1394, 11:55 صبح
محاسبه بیشترین مساحت رو هم چک کن
فکر کنم جواب بده

مساحت 4ضلعی نامنظم رو چطور بدست بیارم؟

rahnema1
دوشنبه 28 اردیبهشت 1394, 17:46 عصر
کاملا درسته . همیشه حداقل 2 تا نقطه کاملا درست انتخاب میشه و 2 نقطه بعدی هم اختلاف زیادی نداره
ولی من چون قطرهای این 4ضلعی رو لازم دارم
این خطا برای من قابل گذشت نیست و نمیشه نادیده بگیرم
الگوریتم بیشترین فاصله هم خطا داره و مثل محاسبه بیشترین محیط نتیجه دقیقی نمیده

کاملا غلطه!
فکر کنم روش را درست پیاده سازی نکردید. شما یه شکل لوزی یا متوازی الاضلاع را بکشید که با روش بیشترین فاصله نشه نقاطش را پیدا کرد

golbafan
شنبه 02 خرداد 1394, 10:54 صبح
مساحت 4ضلعی نامنظم رو چطور بدست بیارم؟

اگر فاصله 4 نقطه از همدیگه بیشینه باشه مساحت هم بیشینه میشه
منظورم از فاصله نقاط درواقع طول اضلاع و طول قطرهاست