Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисование графиков функций в Паскале  (Прочитано 8446 раз)
0 Пользователей и 1 Гость смотрят эту тему.
maliyusha
Гость
« : 05-04-2009 12:18 » 

Улыбаюсь Привет!
y = sin(x); x = [0,1; 1];
Как разбить на отрезки ось Х, чтобы получилось,как на оси У, и можно ли вместо 0,0 поставить просто 0 и при этом оставить все как есть? Пожалуйста,помогите  Не понял особенно с Х!!!
Код:
Uses crt, graph;
Var dr,m: integer;
    xe,ye,xen,yen,xex,yex,xs,ys,kdx,kdy,kt,xl,yl,i: integer;
    x,y,xmin,ymin,xmax,ymax,mx,my,hx,hdx,hdy: real;
    xst, yst: string[5];
begin
    dr := detect;
    initgraph (dr,m,'c:\bp\bgi');
{Granicy okna v dekardovoi sisteme koordinat}
    xmin:=0.1;
    xmax:=1;
    ymin:=-0.9;
    ymax:=1.3;
{Granicy ekrannogo okna}
    xen:=60;
    xex:=620;
    yen:=450;
    yex:=30;
{Shagi razmetki storon okna i koli4estvo delenii}
    hdx:=pi/2;
    hdy:=0.1;
    kdx := round ((xmax-xmin)/hdx);
    kdy := round ((ymax-ymin)/hdy);

{masshtabnye koefficienty dlya X i Y}
    mx:=(xmax-xmin)/(xex-xen);
    my:=(ymax-ymin)/(yen-yex);
{Koordinaty osei}
    xs := round (xen+(0.1-xmin)/mx);
    ys := round (yen-(0-ymin)/my);
    setcolor (19);
    line (xen,ys,xex,ys);
    line (xs,yen,xs,yex);
    outtextxy(trunc(xs+100),trunc(ys-239),'F(X)=SIN(X), 0.1<X<1');
    outtextxy(trunc(xs+6), trunc(ys-239), 'Y');
    outtextxy(trunc(xs+550), trunc(ys-14), 'X');
{Razmetka storony okna po osi X}
    x:=xmin;
    for i:=1 to kdx do
     begin
      xe := round (xen+(x-xmin)/mx);
      str (x:6:1,xst);
      line (xe,yen,xe,yen);
      outtextxy (xe-4,yen,xst);
      x:=x+hdx;
     end;
{Razmetka storony okna po osi Y}
    y:=ymin;
    for i:=1 to kdy do
     begin
      ye := round (yen-(y-ymin)/my);
      str (y:6:1,yst);
      line (xen,ye,xen-5,ye);
      outtextxy (xen-50,ye-4,yst);
      y:=y+hdy;
     end;
 {Vyvod grafika funkcii}
    x:=xmin;
    hx:=mx;
    kt:=xex-xen+1;
    for i:=1 to kt do
     begin
      y := sin(x);
      xe := round (xen+(x-xmin)/mx);
      ye := round (yen-(y-ymin)/my);
      putpixel (xe,ye,30);
      x:=x+hx;
     end;
    readln;
 closegraph;
end.
« Последнее редактирование: 05-04-2009 15:23 от maliyusha » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 05-04-2009 15:23 » 

У тебя X в формуле меняется откуда и до куда? Давай я ее обзову alpha, чтоб не путаться.

X = alpha*(Xend-Xbeg)/(alphaend-alphabeg)+Xbeg

,где
 alpha - текуший угол в формуле (наверно в радианах)
 alphabeg - Самое наименьшее значение угла
 alphaend - Самое наибольшее значение угла
 Xbeg - Наименьшая координата экрана
 Xend - Наибольшая координата экрана

« Последнее редактирование: 05-04-2009 15:27 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
maliyusha
Гость
« Ответ #2 : 05-04-2009 15:28 » 

Ну... если так удобнее, то я только ЗА!

А что даст замена переменных?
« Последнее редактирование: 05-04-2009 15:48 от Алексей1153++ » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 05-04-2009 16:25 » 

Она ничего не даст. Но угол обычно в математике обозначают греческими буквами. Чтоб не произошла у тебя же путаница между углами и координатами графика.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 05-04-2009 17:23 » 

Код честно говоря не смотрел, может быть так и реализовано Улыбаюсь Но мне пришла такая идея, Прирашение координаты экрана и прирашение угла имеют линейную зависимость. Значит тебе надо только посчитать, на сколько должен возрасти угол, если изменить координату на одно деление.
deltaAlpha = (alphaend-alphabeg)/(Xend-Xbeg)
Теперь только останется прибавлять единицу к координате и deltaAlpha к углу. И считать Y и строить график.
Получится типа
Код:
   for x:=1 to kdx do
     begin
          alpha = alpha + deltaAlpha;
          y = sin(alpha);
          ...............................
     end;
« Последнее редактирование: 05-04-2009 17:26 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
maliyusha
Гость
« Ответ #5 : 06-04-2009 15:39 » 

Спасибо за отзыв и помощь, я уже разобралась и теперь все работает правильно.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines