ورود

View Full Version : سوال: محاسبه ی مختصات نقاط بین یک خط



sooren_66
سه شنبه 25 آبان 1395, 13:10 عصر
سلام چطور میشه به زبان جاوا یک برنامه نوشت که مختصات نقاط بین یک خط رو محاسبه کنه. ممنون میشم اگه کد آمادش رو داری یا حداقل فرمولش رو. ممنون

vahid-p
سه شنبه 25 آبان 1395, 17:44 عصر
اینجور مسائل موضوعی که اهمیت داره الگوریتم هست، و معمولا زبان اهمیتی نداره و اکثر الگوریتم ها به هر زبانی با اندکی تغییر در زبان دیگر همان جواب رو خواهند داد. اما وقتی از الگوریتم وارد ابزارها و امکانات دیگری بشیم کلا زبان اهمیت پیدا می کنه.

به هر حال برای رسم یک خط الگوریتم های مختلفی هست. با اینکه خیلی ساده به نظر میرسه ولی به اون سادگی که فکر می کنیم نیست.
ساده ترین الگوریتم ممکن، همون فرمول ریاضی هست که با داشتن دو نقطه، خط عبوری از اونها رو رسم میکنیم.
مثلا یک الگوریتم ساده که از چنین فرمولی استفاده میکنه:
public void line(int x,int y,int x2, int y2, int color) {
int w = x2 - x ;
int h = y2 - y ;
double m = h/(double)w ;
double j = y ;
for (int i=x;i<=x2;i++) {
putpixel(i,(int)j,color) ;
j += m ;
}
}

هر چند تابع putpixel بسته به فریم ورک گرافیکیتون متفاوت خواهد بود (یک فضای گرافیکی برای رسم نقاط لازم دارید، که میتونید از Swing استفاده کنید و بر روی یک JPanel این نقاط رو رسم کنید).
میتونید الگوریتم های بهتری رو هم برای رسم خط (اگر خیلی دوست دارید خودتون پیاده سازی کنید) پیدا کنید[1] (http://tech-algorithm.com/articles/drawing-line-using-bresenham-algorithm/)، اما زبان ها چنین اشکال ابتدایی رو به صورت پیشفرض در اختیارتون میذارن. مثلا جاوا به راحتی با drawLine می تونید خط بکشید.

اگر در مورد JFrame,JPanel و کلا Swing اطلاعات لازم رو ندارید، لازمه اول اینا رو بدونید:http://www.tutorialspoint.com/swing

sooren_66
سه شنبه 25 آبان 1395, 21:55 عصر
با سلام. من منظورم از این پرسش رسم خط نبود محاسبه ی نقاطی که بین یک پاره خط یا یک خط موجود وجود داره بود. که برمی گرده به یک فرمول توی فیزیک احتمالا" من اون رو می خوام بدونم.ممنون

sooren_66
چهارشنبه 26 آبان 1395, 10:35 صبح
کسی هست برنامشو داشته باشه؟

vahid-p
چهارشنبه 26 آبان 1395, 14:30 عصر
با سلام. من منظورم از این پرسش رسم خط نبود محاسبه ی نقاطی که بین یک پاره خط یا یک خط موجود وجود داره بود. که برمی گرده به یک فرمول توی فیزیک احتمالا" من اون رو می خوام بدونم.ممنون
پیدا کردن نقاط بین دو خط در ریاضی مطرح میشه نه فیزیک! که فرمولش (y-y0=m(x-x0 هست. کدی که گذاشتم همین کار رو میکنه، فقط اگر نمیخواید رسمش کنید، به جای putpixel میشه خروجی رو چاپ کرد. البته در این کد به ازای x های صحیح y ها رو چاپ می کنه. چون تعداد نقاط یک خط بی نهایت هست نمیشه کل نقاط رو حساب کرد.

اگر کد رو میخوندید خودتون میتونستید تغییرش بدید به:

public void line(int x,int y,int x2, int y2) {
int w = x2 - x ;
int h = y2 - y ;
double m = h/(double)w ;
double j = y ;
for (int i=x;i<=x2;i++) {
System.out.println("X="+i+",Y="+j);
j += m ;
}
}