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

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

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

> График ф-ции и координатные оси
18192123
сообщение 23.03.2007 17:30
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 17)
Алена
сообщение 23.03.2007 17:39
Сообщение #2


Гость






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


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

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

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


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

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

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

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


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


Профи
****

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

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


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

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

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


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

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

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


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

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


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


Профи
****

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

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


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


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

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

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


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

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


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


Профи
****

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

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


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

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

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


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


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

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

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


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

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


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


Профи
****

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

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


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

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


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

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

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


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

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

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

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

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


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


Гость






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

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

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


Профи
****

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

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


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


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


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

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

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


Гость






Цитата
не получается предусмотреть, чтоб график ф-ции рисовался и на отрицательной полуплоскости......
Тогда центр координат - надо перенести в середину экрана... Вот так, например:
SetViewPort(getmaxx div 2, getmaxy div 2, getmaxx, getmaxy, ClipOff)
Тогда при задании отрицательных значений как по OX, так и по OY у тебя будет отображаться правильная точка (относительно центра экрана, только надо учесть, что координата Y изменяется сверху вниз, а не снизу вверх)
 К началу страницы 
+ Ответить 
18192123
сообщение 23.03.2007 20:24
Сообщение #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 
 К началу страницы 
+ Ответить 
18192123
сообщение 23.03.2007 21:09
Сообщение #16


Профи
****

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

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


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

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

Кстати, если прокрутить такую ситуацию в Ехсеl, то результат такой же...
???????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.03.2007 1:39
Сообщение #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
Обрати внимание, насколько значения функции при отрицательных аргументах по модулю меньше, чем при положительных... А у тебя масштабирование, и чтобы отобразить значение в несколько десятков тысяч, естественно, приходится умножать на очень маленький коэффициент, при этом значения порядка единиц просто сливаются с нулем...
 К началу страницы 
+ Ответить 
18192123
сообщение 24.03.2007 13:17
Сообщение #18


Профи
****

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

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


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

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

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

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

 



- Текстовая версия 20.07.2025 18:19
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"