ورود

View Full Version : سوال: چگونه میتوان محور افقی در یک گراف را با توجه به بازه اعداد تغییر داد؟



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();

بقیه کدها رو بر اساس کد بالا اگر تغییر بدید ، کل گراف در نیمه بالا صفحه کشیده میشود.

ممنون میشم بنده رو راهنمایی کنید.

پانوشت : ز هیچگونه محصولات آماده ایی نمیخوام استفاده کنم.

hassangholi
پنج شنبه 01 دی 1390, 20:43 عصر
راه حلی که خودم به نظرم رسید این بود که بجای عوض کردن محور افقی تمامی اعداد رو با توجه به کوچکترین عدد منفی در مجموعه با Abs عدد منفی جمع کنم ، به اصطلاح یه lift up بکنم تا همه اعداد با حفظ scale بیان بالای محور x .

ولی بازهم ممون میشم از دوستانی که در زمینه رسم گراف تجربه دارن بنده رو اهنمایی کنن و راه حل درست این قضیه رو به من نشون بدن.

با تشکر.