IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> графика в Си, масштабирование
сообщение
Сообщение #1


Влюблённый псих
***

Группа: Пользователи
Сообщений: 185
Пол: Женский
Реальное имя: Лейла

Репутация: -  1  +


Помогите пожалуйста разобраться с функцией. Она строит график Sin(x). Функция f1 возвращает значение Sin(x), а вот эта вот функция grafik собственное его рисует. Проблема возникла при маленьких и отрицательных диапозонах. Напрмер если задать x1 и x2 отрицательные, или просто чтоб x2 был больше x1 на 1, то функция ничего уже не рисует вообще. Хотя если ввести от 0 до 1, то рисуется в увеличенном масштабе.
Я пыталась достичь нужного результата, меняя значения x0 (начало координат) и w (ширина области графика) в зависимости от x1 и x2, но ничего все-равно не выходит! Может ,по-другому как-то это сделать?
(l и b это левый нижний угол области графика, а h это высота области графика, mx и my - масштаб по осям X и Y).

void grafik(float x1, float x2)
{
float y1,y2;
float x,y;
float dx=0.0001;
int l;
int b;
int w,h;
float mx,my;
int x0,y0;

if ((x1<x2) & (x1>=0))
{x0=0; l=50; b=480; w=700; h=478;}

else if ((x1<x2) & (x1<0))
{x0=100; l=50; b=480; w=1800; h=478;}

y1 = f1(x1);
y2 = f1(x2);
x = x1+dx;
do {
y=f1(x);
if (y<y1) y1=y;
if (y>y2) y2=y;
x+=dx;
} while (x<=x2);

my = h/fabs(y2-y1);
mx = w/fabs(x2-x1);
y0=b-abs(y1*my);

x=x1;
do {y=f1(x);
putpixel(x0+x*mx,y0-y*my,15);
x+=dx;
} while (x<=x2);
}


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Прикрепи лучше полную программу, чтобы можно было сразу запустить ее, а не придумывать еще раз то, что ты уже сделала...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Влюблённый псих
***

Группа: Пользователи
Сообщений: 185
Пол: Женский
Реальное имя: Лейла

Репутация: -  1  +


Вот он.

Добавлено через 2 мин.
Цитата(Тёмный Эльф @ 11.05.2007 21:22) *

Вот он.

Наверное так лучше прикрепить


Прикрепленные файлы
Прикрепленный файл  GRAFIK_S.CPP ( 1.48 килобайт ) Кол-во скачиваний: 215
Прикрепленный файл  Sinx.rar ( 1.55 килобайт ) Кол-во скачиваний: 143
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Погоди... Что-то я не понял... Во-первых, у тебя ошибка с одним "&" вместо "&&" (логическое условие - это двойной амперсанд)... А во-вторых - ты при выполнении условия присваиваешь ширине значение 1800, и потом работаешь с ним. А фактически у тебя ширина экрана - 640 пикселей, естественно, что вычисленные значения просто не помещаются на экран...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Влюблённый псих
***

Группа: Пользователи
Сообщений: 185
Пол: Женский
Реальное имя: Лейла

Репутация: -  1  +


Цитата
ты при выполнении условия присваиваешь ширине значение 1800, и потом работаешь с ним. А фактически у тебя ширина экрана - 640 пикселей, естественно, что вычисленные значения просто не помещаются на экран...


но ведь увеличивая w, я меняю масштаб рисунка. просто мне нужно чтобы при любых введненных значениях график заполнял собой весь экран. Но если x1 предположим -4, а x2 =-3 то это уже не катит и вообще ничего не вырисовывается.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
просто мне нужно чтобы при любых введненных значениях график заполнял собой весь экран
В таком случае, ты должна делать так:
void grafik(float x_min, float x_max)
{
float y_min, y_max;
float x,y;
float dx=0.0001;
const int w = 640; const int h = 480;
float mx,my;

y_min = f1(x_min); y_max = f1(x_min);
for(x = x_min; x <= x_max; x += dx) {
y = f1(x);
if(y < y_min) y_min = y;
if(y > y_max) y_max = y;
}

my = h/fabs(y_max-y_min);
mx = w/fabs(x_max-x_min);

for(x = x_min; x <= x_max; x += dx) {
y = f1(x);
putpixel((float)(x - x_min)*mx, (y - y_min)*my, WHITE);
}
}
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Влюблённый псих
***

Группа: Пользователи
Сообщений: 185
Пол: Женский
Реальное имя: Лейла

Репутация: -  1  +


Это здорово. Спасибо, volvo smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 22:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name