Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2016, 15:58   #1
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию Построить график в TImage

Нарисуйте на экране кривую x = 5 cos(t) + cos(5t) , y = 5 sin(t) - sin(5t)
при t от 0 до 58pi с шагом 29pi/30 , от 0 до 74pi с шагом 0.74pi и от 0 до 2 с шагом pi/180
.

Пока пытался сделать, нашел пример функции по y: https://www.youtube.com/watch?v=YWYPF0JhHWI

Не долго думая скачал исходник и попытался переделать на свой лад.

Как понял, в идеале должно было получиться вот что: http://www.yotx.ru/#!1/3_h/ubWwf7Wwf...0wvwXbgezsAwY=

Как можно дополнить уже имеющийся код, чтобы строило функцию от y и x одновременно?
Пока поставил только по y и не совсем удачно.

Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm3 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
Const
x1 = -10;  //Начало оси Ox
x2 = 10;   //Конец оси Ox
m = 50;    //Масштаб графика
var
x0,y0:integer;  //Центры осей Ox и Oy
x,y,t:real;       //Координаты, по которым отрисовывается график

begin
  with Image1 do  //Чтобы 100 раз не писать Image1. перед нужной процедурой/функцией
   begin
     x0 := Width div 2; //x0 = центр Image1 по оси Ox
     y0 := Height div 2; //y0 = центр Image1 по оси Oy

     with Canvas do //Чтобы 100 раз не писать ...
      begin
        Pen.Color := ClBlack; //Цвет пера = черный
        Pen.Width := 1;       //Ширина пера = 1
        MoveTo(0,y0);         //Положение курсора = (0,y0)
        LineTo(width,y0);     //Линия от (0,y0) до (width,y0) - линия оси Ox
        MoveTo(x0,0);         //Положение курсора = (x0,0)
        LineTo(x0,Height);    //Линия от (x0,0) до (x0,height) - линия оси Oy

        Pen.Color := ClRed;   //Цвет пера = красный
        Pen.Width := 2;       //Ширина пера = 2

        while t<58*pi do begin

        x:=x1;                //Начальное положеине курсора по оси Ox
        y:=5*sin(t) - sin(trunc(5*t));           //Начальное положение курсора по оси Oy
        MoveTo(x0+Trunc(x*m),y0-Trunc(y*m)); //Переносим курсор на заданные
        while x<x2 do                        // координаты относительно центра
         begin                               // осей координат и масштаба
           x:= x + 0.01;   //Точность отрисовки графика
           y:= 5*sin(t) - sin(trunc(5*t));    //Сам график
           LineTo(x0+Trunc(x*m),y0-Trunc(y*m)); //ОТРИСОВКА ГРАФИКА
         end;
         t:=t+(29*pi)/30;
      end;
      end;

   end;


end;

end.
jirtreck вне форума Ответить с цитированием
Старый 26.06.2016, 16:34   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
const m=10;
      t0=0;
var x,y,t:real;

   procedure Figyre(x0,y0:integer; t1,dt:real);
   begin
      With Image1.Canvas do
      begin
         t:=t0-dt;
         x:=5*cos(t0)+cos(5*t0);
         y:=5*sin(t0)-sin(5*t0);
         MoveTo(Round((x0+x)*m),Round((y0-y)*m));
         Repeat
            t:=t+dt;
            x:=5*cos(t)+cos(5*t);
            y:=5*sin(t)-sin(5*t);
            LineTo(Round((x0+x)*m),Round((y0-y)*m));
         Until t>=t1;
      end;
   end;

begin
   Figyre(7,7,58*pi,29*pi/30);
   Figyre(20,7,74*pi,0.74*pi);
   Figyre(33,7,2,pi/180);
end;
Изображения
Тип файла: png Безымянный.png (21.8 Кб, 190 просмотров)
Тип файла: png Безымянный1.png (25.6 Кб, 99 просмотров)
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 26.06.2016 в 16:36.
newerow1989 вне форума Ответить с цитированием
Старый 26.06.2016, 16:38   #3
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию

Пришел, спас, да еще и функции отличные дал!
Благодарю!

А на сайте баг: ставил не так давно уже репу кому-то, а пишет, что не могу заново поставить её, хотя ставил где-то с пол года назад.
jirtreck вне форума Ответить с цитированием
Старый 26.06.2016, 16:39   #4
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить график в С++ AbsenTt Помощь студентам 4 06.09.2013 20:42
Построить График МакаРомка! Паскаль, Turbo Pascal, PascalABC.NET 0 02.06.2013 11:17
Построить график qwerty26 Мультимедиа в Delphi 2 26.10.2012 21:32
построить график. с++ Yokka C++ Builder 1 13.05.2010 18:23
как рисовать график ф-ии с на компоненте TImage? Владимир1111 Помощь студентам 4 02.04.2010 10:26