Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.11.2007, 15:25
nav nav вне форума
Прохожий
 
Регистрация: 27.11.2007
Сообщения: 30
Репутация: 10
По умолчанию помогите построить графики

Здравствуйте. Я инвалид, изучаю Delphi самостоятельно. Но следующая программа никак не идёт. Не могли бы вы помочь разобраться. Надо написать программу для построения графиков y=cos(wx) y=sin(wx); Delphi постоянно выдаёт информацию о том, что экранные координаты ix, iy неверны. Экранные координаты рассчитываю по формулам в книжке (x-x1)/(x2-x1)=(ix-ix1)/(ix2-ix1). С клавиатуры ввожу данные: количество точек_n=400, частота_w=4, x0=-6.28, xk=6.28, Ymin=-0.22, Ymax=1;
Код:
procedure TForm1.Button2Click(Sender: TObject);
var x,y,x0,xk,Ymax,Ymin,step,w:real;
     pw,ph,n,code,i,ix,iy:integer;
begin
 val(ntedit.text,n,code); val(wedit.text,w,code);
 val(x0edit.text,x0,code); val(xedit.text,xk,code);
 val(minedit.text,Ymin,code); val(maxedit.text,Ymax,code);
 pw:=paintbox1.Width; ph:=paintbox1.Height;
 with paintbox1.Canvas do
  begin
   refresh; pen.Width:=1; brush.Color:=clRED; pen.Color:=1;
   rectangle(0,0,pw,ph);
   case radiogroup1.ItemIndex of
    0: begin
         pen.Width:=2; pen.Color:=clYELLOW; pen.Style:=pssolid;
         iy:=round((cos(w*x0)-Ymin)/(ymax-ymin)*ph); step:=(xk-x0)/n;
         moveto(0,ph-iy-1); x:=x0;
         for i:=2 to n do
          begin
           x:=x+step; y:=cos(w*x);
           ix:=round((x-x0)/(xk-x0)*pw); iy:=round((ymax-ymin)*ph);
           lineto(ix,ph-iy-1)
          end;
         ix:=0;
        end;
    1: begin
        pen.Width:=3; pen.color:=clGREEN; pen.Style:=pssolid;
        iy:=round((sin(w*x0)-ymin)/(ymax-ymin)*ph); step:=(xk-x0)/n;
        moveto(0,round(ph-iy-1)); x:=x0;
         for i:=2 to n do
          begin
           x:=x+step; y:=sin(w*x);
           ix:=round((x-x0)/(xk-x0)*pw); iy:=round((ymax-ymin)*ph);
           lineto(ix,ph-iy-1)
          end;
         ix:=0;
       end
   end
   end
end;
.

Последний раз редактировалось nav, 27.11.2007 в 15:54.
Ответить с цитированием
  #2  
Старый 27.11.2007, 15:32
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,551
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от nav
Здравствуйте. Я инвалид, изучаю Delphi самостоятельно. Но следующая программа никак не идёт. Не могли бы вы помочь разобраться. Надо написать программу для построения графиков y=cos(wx) y=sin(wx); Delphi постоянно выдаёт информацию о том, что экранные координаты ix, iy неверны. Экранные координаты рассчитываю по формулам в книжке (x-x1)/(x2-x1)=(ix-ix1)/(ix2-ix1). С клавиатуры ввожу данные: количество точек_n=400, частота_w=4, x0=-6.28, xk=6.28, Ymin=-0.22, Ymax=1;
procedure TForm1.Button2Click(Sender: TObject)...
Для выделеня кода существует специальный тег!
Читай правила пункт 2.8!
Ответить с цитированием
  #3  
Старый 28.11.2007, 15:07
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

У меня всё закрашивается красным цветом, графика не видно, но и ругани нет. Видно, пример неудачен.
Ответить с цитированием
  #4  
Старый 03.12.2007, 21:53
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Лампочка

Вот держи исходник с примерами. Не знаю можно ли выкладывать его, сам где-то случайно скачал.
Вложения
Тип файла: zip График.zip (50.7 Кбайт, 49 просмотров)
Ответить с цитированием
  #5  
Старый 05.12.2007, 12:34
nav nav вне форума
Прохожий
 
Регистрация: 27.11.2007
Сообщения: 30
Репутация: 10
По умолчанию

спасибо всем, кто написал. Буду разбираться.
AlexSku, может всё дело в координатах? Хотя формулу для экранных координат брал из книжки
Ответить с цитированием
  #6  
Старый 06.12.2007, 12:22
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Советую упростить пример. Главное - освоить функцию LineTo(). Можно ещё проводить ломаную (Polyline). Можно использовать компонент TChart, можно залезть в DirectX или OpenGL.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:38.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025