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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> График ф-ции и координатные оси
сообщение
Сообщение #1


Профи
****

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

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


Мне нужно построить график ф-ции у= 2е^x - 4cos2x.
График вроде строит, но я не пойму, почему у меня только горизонтальная ось?
В тот момент, когда программа вычисляет координату У горизонтальной оси (у0), после следует рисовать координатные оси....
???


uses Graph;
var x1, x2, y1, y2, x, y, dx, mx, my : real;
l , b, h, w, x0, y0 : integer;
st : string;
grDriver, grMode, ErrCode : integer;
Function f(x : real) : real;
begin
f := 2*Exp(x) - 4*cos(2*x);
end;
begin
grDriver:=VGA; GrMode:=VGAHi;
InitGraph(grDriver,grMode,' ');
ErrCode:=GraphResult;
if ErrCode<>grOk then Halt(1);
l:=40;b:=400;
h:=300;w:=300;
x1:=0;x2:=25;dx:=0.01;
y1:=0;y2:=0;
x:=x1;
repeat
y:=f(x);
if y<y1 then y1:=y;
if y>y2 then y2:=y;
x:=x+dx;
until(x>=x2);
my:=h/abs(y2-y1);
mx:=w/abs(x2-x1);
x0:=1;
y0:=b-abs(Round(y1*my));
Line(1,b,1,b-h);
Line(x0,y0,x0+w,y0);
Str(y2:5:1,st);
OutTextXY(l+5,b-h,st);
Str(y1:5:1,st);
OutTextXY(l+5,b,st);
x:=x1;
repeat
y:=f(x);
Putpixel(x0+Round(x*mx),y0-Round(y*my),13);
x:=x+dx;
until(x>=x2);
Readln;
CloseGraph;
end.



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


Гость






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


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

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


Цитата(Алена @ 23.03.2007 17:39) *

Почему же только горизонтальная? У меня обе отображаются, вертикальная тоже...

а у меня нет Прикрепленное изображение

Добавлено через 2 мин.
к стате а где ты рисуешь вертикальную ось? (в коде)


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

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

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


Цитата(compiler @ 23.03.2007 17:44)
а у меня нет

присмотрись внимательнее: вериткальная ось у тебя прям рядом с левой границей окна...

Line(1,b,1,b-h);
Line(x0,y0,x0+w,y0);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

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


Цитата(18192123 @ 23.03.2007 17:55) *
присмотрись внимательнее: вериткальная ось у тебя прям рядом с левой границей окна...

точно. прошу прощения, больше надо спать...


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

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

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


может у меня эта ось выскакивает за пределы окна?
Я уже и интервалы изменения аргумента меняла и размеры области вывода(высота и ширина), а оси всё не видно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

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


А ты можешь картинку привести? smile.gif

Сообщение отредактировано: Артемий2 -


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

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

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


Цитата(Артемий2 @ 23.03.2007 18:13) *

А ты можешь картинку привести? smile.gif

прошу прощения за качество...


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

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


У тебя конкретная обрезка изображения идет! Попробуй использовать другие драйвера и разрешение..

З.Ы. А зачем фоткать было?


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

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

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


Цитата(Артемий2 @ 23.03.2007 18:41)
А зачем фоткать было?

А через prtscr не получилось..)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

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


Цитата(18192123 @ 23.03.2007 19:07) *

А через prtscr не получилось..)

а с контрлом, а потом в пэинт или что там у тебя...

ужасное оформление

Сообщение отредактировано: compiler -


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата
а с контрлом, а потом в пэинт или что там у тебя...
А не получится... Надо использовать специальный модуль (см. в поиске, "Скриншот" "Графика") ...

18192123, почему именно по САМОМУ левому краю? Отступ в 50 пикселей сделать нельзя?

(проблема, кстати, очень похожа не неправильно выставленный Refresh Rate для определенного разрешения экрана...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Профи
****

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

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


Цитата(volvo @ 23.03.2007 19:27) *


18192123, почему именно по САМОМУ левому краю? Отступ в 50 пикселей сделать нельзя?


где сделать отступ? ( не поняла тебя...)
а с осями я разобралась (изменила драйвер и режим)

И ёще вопросик: у меня не получается предусмотреть, чтоб график ф-ции рисовался и на отрицательной полуплоскости......

Сообщение отредактировано: 18192123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата
не получается предусмотреть, чтоб график ф-ции рисовался и на отрицательной полуплоскости......
Тогда центр координат - надо перенести в середину экрана... Вот так, например:
SetViewPort(getmaxx div 2, getmaxy div 2, getmaxx, getmaxy, ClipOff)
Тогда при задании отрицательных значений как по OX, так и по OY у тебя будет отображаться правильная точка (относительно центра экрана, только надо учесть, что координата Y изменяется сверху вниз, а не снизу вверх)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Профи
****

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

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


Цитата(volvo @ 23.03.2007 19:57) *

Тогда центр координат - надо перенести в середину экрана... Вот так, например:
SetViewPort(getmaxx div 2, getmaxy div 2, getmaxx, getmaxy, ClipOff)
Тогда при задании отрицательных значений как по OX, так и по OY у тебя будет отображаться правильная точка (относительно центра экрана, только надо учесть, что координата Y изменяется сверху вниз, а не снизу вверх)

А почему, если я увеличиваю интервал изменения аргумента ( например, от -10 до 10), то график в отрицательной полуплоскости вырождается в прямую? ( а если брать -5 до 2.5 - всё нормально).....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Профи
****

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

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


Цитата(18192123 @ 23.03.2007 20:24) *

А почему, если я увеличиваю интервал изменения аргумента ( например, от -10 до 10), то график в отрицательной полуплоскости вырождается в прямую? ( а если брать -5 до 2.5 - всё нормально).....

Кстати, если прокрутить такую ситуацию в Ехсеl, то результат такой же...
???????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Цитата
А почему, если я увеличиваю интервал изменения аргумента ( например, от -10 до 10), то график в отрицательной полуплоскости вырождается в прямую?
Потому, что функция такая... Тут дело не в отрицательной полуплоскости, а как раз в положительной. Функция возрастает экспоненциально. Смотри. Пишем совсем маленькую программу:

function f(x: real): real;
begin
f := 2 * exp(x) - 4 * cos(2*x);
end;

var
x, xst, xfn: real;

begin
xst := -10; xfn := 10;
x := xst;
repeat
writeln('X = ', x:10:5, '| Y = ', f(x):10:5);
x := x + 0.3;
until x > xfn;

end.
И получаем результат:

X =  -10.00000| Y =   -1.63224
X = -9.70000| Y = -3.40905
X = -9.40000| Y = -3.99492
X = -9.10000| Y = -3.18519
X = -8.80000| Y = -1.26267
X = -8.50000| Y = 1.10106
X = -8.20000| Y = 3.08034
X = -7.90000| Y = 3.98381
X = -7.60000| Y = 3.49595
X = -7.30000| Y = 1.78729
X = -7.00000| Y = -0.54513
X = -6.70000| Y = -2.68631
X = -6.40000| Y = -3.88801
X = -6.10000| Y = -3.73005
X = -5.80000| Y = -2.26710
X = -5.50000| Y = -0.00953
X = -5.20000| Y = 2.25497
X = -4.90000| Y = 3.73660
X = -4.60000| Y = 3.91948
X = -4.30000| Y = 2.74202
X = -4.00000| Y = 0.61863
X = -3.70000| Y = -1.70474
X = -3.40000| Y = -3.41084
X = -3.10000| Y = -3.89607
X = -2.80000| Y = -2.98064
X = -2.50000| Y = -0.97048
X = -2.20000| Y = 1.45094
X = -1.90000| Y = 3.46301
X = -1.60000| Y = 4.39697
X = -1.30000| Y = 3.97262
X = -1.00000| Y = 2.40035
X = -0.70000| Y = 0.31330
X = -0.40000| Y = -1.44619
X = -0.10000| Y = -2.11059
X = 0.20000| Y = -1.24144
X = 0.50000| Y = 1.13623
X = 0.80000| Y = 4.56788
X = 1.10000| Y = 8.36234
X = 1.40000| Y = 11.87929
X = 1.70000| Y = 14.81509
X = 2.00000| Y = 17.39269
X = 2.30000| Y = 20.39698
X = 2.60000| Y = 25.05341
X = 2.90000| Y = 32.80621
X = 3.20000| Y = 45.09232
X = 3.50000| Y = 63.21529
X = 3.80000| Y = 88.39733
X = 4.10000| Y = 122.03719
X = 4.40000| Y = 166.14611
X = 4.70000| Y = 223.89312
X = 5.00000| Y = 300.18260
X = 5.30000| Y = 402.21497
X = 5.60000| Y = 540.04080
X = 5.90000| Y = 727.19321
X = 6.20000| Y = 981.55331
X = 6.50000| Y = 1326.65348
X = 6.80000| Y = 1793.64777
X = 7.10000| Y = 2424.18532
X = 7.40000| Y = 3274.43027
X = 7.70000| Y = 4420.50780
X = 8.00000| Y = 5965.74661
X = 8.30000| Y = 8050.25610
X = 8.60000| Y = 10863.63390
X = 8.90000| Y = 14661.95525
X = 9.20000| Y = 19790.65556
X = 9.50000| Y = 26715.49884
X = 9.80000| Y = 36064.56431
Обрати внимание, насколько значения функции при отрицательных аргументах по модулю меньше, чем при положительных... А у тебя масштабирование, и чтобы отобразить значение в несколько десятков тысяч, естественно, приходится умножать на очень маленький коэффициент, при этом значения порядка единиц просто сливаются с нулем...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Профи
****

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

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


Цитата(volvo @ 24.03.2007 1:39) *

Потому, что функция такая... Тут дело не в отрицательной полуплоскости, а как раз в положительной. Функция возрастает экспоненциально. Обрати внимание, насколько значения функции при отрицательных аргументах по модулю меньше, чем при положительных... А у тебя масштабирование, и чтобы отобразить значение в несколько десятков тысяч, естественно, приходится умножать на очень маленький коэффициент, при этом значения порядка единиц просто сливаются с нулем...

Большое спасибо! Теперь вопросов нет!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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