hassangholi
پنج شنبه 01 دی 1390, 19:16 عصر
سلام
یک برنامه رسم گراف نوشتم که برای اعداد مثبت به خوبی کار میکند ولی مشکل از جایی شروع میشه که میخوام اعداد منفی رو هم وارد گراف کنم . چون محور فرضی اکس در نقطه 0و0 هست پس نتیجه این میشود که تمامی نقاط بر روی محور X قرار میگیرند برای رفع این مشکل به یک راه حل ابتکاری رسیدم که البته خیلی کارآیی نداره در روش ابداعی ، من محور فرضی افقی و یا همون X را من به نقطه ایی بالاتر بر فرض X=0, Y=150 میفرستم و با این تکنیک میتونم اعداد منفی رو تا بازه -14 در نمودار نشون بدم ولی این راه حل خیلی کارا نیست و نیاز به فرمول دقیق برای تغییر محور افقی دارم .
کد برای به دست آوردن سقف :
double scale = (double)(height - 2*borderSpace)/getMax();
کد برای رسم خطوط :
for(int i = 0 ; i < data.length-1; i++) {
double x1 = borderSpace + i*xInc;
double y1 = height - borderSpace - scale*data[i];
double x2 = borderSpace + (i+1)*xInc;
double y2 = height - borderSpace - scale*data[i+1];
g2.draw(new Line2D.Double(x1, y1, x2, y2));
}
کد برا بالا بردن خط افقی فرضی :
int height2 = getHeight() - getHeight()/2;
double scale = (double)(height2 - 2*borderSpace)/getMax();
بقیه کدها رو بر اساس کد بالا اگر تغییر بدید ، کل گراف در نیمه بالا صفحه کشیده میشود.
ممنون میشم بنده رو راهنمایی کنید.
پانوشت : ز هیچگونه محصولات آماده ایی نمیخوام استفاده کنم.
یک برنامه رسم گراف نوشتم که برای اعداد مثبت به خوبی کار میکند ولی مشکل از جایی شروع میشه که میخوام اعداد منفی رو هم وارد گراف کنم . چون محور فرضی اکس در نقطه 0و0 هست پس نتیجه این میشود که تمامی نقاط بر روی محور X قرار میگیرند برای رفع این مشکل به یک راه حل ابتکاری رسیدم که البته خیلی کارآیی نداره در روش ابداعی ، من محور فرضی افقی و یا همون X را من به نقطه ایی بالاتر بر فرض X=0, Y=150 میفرستم و با این تکنیک میتونم اعداد منفی رو تا بازه -14 در نمودار نشون بدم ولی این راه حل خیلی کارا نیست و نیاز به فرمول دقیق برای تغییر محور افقی دارم .
کد برای به دست آوردن سقف :
double scale = (double)(height - 2*borderSpace)/getMax();
کد برای رسم خطوط :
for(int i = 0 ; i < data.length-1; i++) {
double x1 = borderSpace + i*xInc;
double y1 = height - borderSpace - scale*data[i];
double x2 = borderSpace + (i+1)*xInc;
double y2 = height - borderSpace - scale*data[i+1];
g2.draw(new Line2D.Double(x1, y1, x2, y2));
}
کد برا بالا بردن خط افقی فرضی :
int height2 = getHeight() - getHeight()/2;
double scale = (double)(height2 - 2*borderSpace)/getMax();
بقیه کدها رو بر اساس کد بالا اگر تغییر بدید ، کل گراف در نیمه بالا صفحه کشیده میشود.
ممنون میشم بنده رو راهنمایی کنید.
پانوشت : ز هیچگونه محصولات آماده ایی نمیخوام استفاده کنم.