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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2014, 17:18   #1
alexey9999
Пользователь
 
Регистрация: 09.12.2013
Сообщений: 13
По умолчанию Обозначение максимума и минимума на графике математической функции

Есть программа, рисующая график функции(на image).
Вопрос: как на графике обозначить максимум и минимум функции ?

вот примерный код, но он не работает
Код:

   py:=trunc(ClientHeight-(Y+1)*ClientHeight/2);
    if (y<=min) then
        begin
        Image1.Canvas.Font.Color:=clGreen;
        Image1.Canvas.TextOut(px,py-20,'min');
        end;
    if (y>=max) then
        begin
        Image1.Canvas.Font.Color:=clRed;
        Image1.Canvas.TextOut(px,py+10,'max');
        end;
    inc(i);
вот вся программа
Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Spin, Grids, Buttons;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    RadioGroup1: TRadioGroup;
    SpinEdit1: TSpinEdit;
    SpinEdit2: TSpinEdit;
    Label1: TLabel;
    Label2: TLabel;
    StringGrid1: TStringGrid;
    SpeedButton1: TSpeedButton;
    Edit1: TEdit;
    Label3: TLabel;
    procedure sin_grap;
    procedure FormResize(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    function GetExcelFileName: String;
    procedure SpeedButton1Click(Sender: TObject);
  private
    { Private declarations }
    h:boolean;
    max,min:real;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
uses
ComObj;
 
 
{$R *.dfm}
const
  EXCEL_FILE_EXT = '.xls';
 
procedure TForm1.sin_grap;
var
x,y:real;
px,py:longint;
i:integer;
{begin
  color:=clwhite;
  for px:=0 to clientwidth do
  begin
    x:=px*4*pi/ClientWidth;
    y:=sin(x);
    py:=trunc(ClientHeight-(y+1)*ClientHeight/2);
    canvas.Pixels[px,py]:=0;
  end;
 
end;  }
 
begin
stringgrid1.Cells[0,0]:='x';
stringgrid1.Cells[0,1]:='y';
with image1 do
begin
    color:=clwhite;
    canvas.MoveTo(0,clientheight div 2);
    //StringGrid1.ColCount:=ClientWidth+1;
  for px:=0 to clientwidth do
  begin
   x:=px*4*pi/ClientWidth;
   case radiogroup1.itemindex of
      0:y:=sin(spinedit1.Value *x)+spinedit2.Value*0.1;
      1: y:=cos(spinedit1.Value *x)+spinedit2.Value*0.1;
      2: if cos(spinedit1.Value *x)+spinedit2.Value<>0 then
          y:=(sin(spinedit1.Value *x)+spinedit2.Value)/(cos(spinedit1.Value *x)+spinedit2.Value);
   end;
     StringGrid1.ColCount:=px+1;
     stringgrid1.Cells[px+1,0]:=floattostr(x);
     stringgrid1.Cells[px+1,1]:=floattostr(y);
    py:=trunc(ClientHeight-(y+1)*ClientHeight/2);
    canvas.lineto(px,py);
 
    py:=trunc(ClientHeight-(Y+1)*ClientHeight/2);
    if (y<=min) then
        begin
        Image1.Canvas.Font.Color:=clGreen;
        Image1.Canvas.TextOut(px,py-20,'min');
        end;
    if (y>=max) then
        begin
        Image1.Canvas.Font.Color:=clRed;
        Image1.Canvas.TextOut(px,py+10,'max');
        end;
    inc(i);
    end;
 
 
 max:=strtofloat(stringgrid1.cells[1,1]);
 //min:=strtofloat(stringgrid1.cells[1,1]);
for i:=2 to stringgrid1.ColCount-1 do
begin
  if stringgrid1.Cells[i,1]> floattostr(max) then
    max:= strtofloat(stringgrid1.Cells[i,1]);
  if stringgrid1.Cells[i,1]< floattostr(min) then
    min:= strtofloat(stringgrid1.Cells[i,1]);
end;
showmessage('max= '+floattostr(max)+'min= '+floattostr(min));
h:=true;
 
end;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
//image1.Width:=form1.clientwidth div 2;
image1.canvas.rectangle(0,0,image1.width,image1.Height);
sin_grap;
end;
 
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
   FormResize(self);
end;
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
if h then
begin
stringgrid1.canvas.Font.Color:=clBlack;
stringgrid1.canvas.Font.Size:=stringgrid1.DefaultRowHeight div 2;
if acol = 0 then StringGrid1.canvas.Brush.color:=form1.color;
if arow=0 then exit;
if stringgrid1.cells[acol,1]=floattostr(max) then
  begin
      stringgrid1.Canvas.Brush.color:=clred;
      stringgrid1.Canvas.Rectangle(rect);
      StringGrid1.Canvas.textrect(rect,rect.Left,rect.Top,StringGrid1.cells[acol,1]);
  end;
 
  if stringgrid1.cells[acol,1]=floattostr(min) then
  begin
      stringgrid1.Canvas.Brush.color:=clgreen;
      stringgrid1.Canvas.Rectangle(rect);
      StringGrid1.Canvas.textrect(rect,rect.Left,rect.Top,StringGrid1.cells[acol,1]);
  end;
end;
end;
 
end.
alexey9999 вне форума Ответить с цитированием
Старый 16.12.2014, 17:55   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Есть же TChart для графиков...
Человек_Борща вне форума Ответить с цитированием
Старый 16.12.2014, 18:02   #3
alexey9999
Пользователь
 
Регистрация: 09.12.2013
Сообщений: 13
По умолчанию

Есть, но по заданию нужно на image
alexey9999 вне форума Ответить с цитированием
Старый 16.12.2014, 18:06   #4
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
вот примерный код, но он не работает
Что значит, не работает?
WinCoder вне форума Ответить с цитированием
Старый 16.12.2014, 18:10   #5
alexey9999
Пользователь
 
Регистрация: 09.12.2013
Сообщений: 13
По умолчанию

не знаю как объяснить, вообщем вот что получается
Изображения
Тип файла: jpg Безымянный11.jpg (23.4 Кб, 118 просмотров)
alexey9999 вне форума Ответить с цитированием
Старый 17.12.2014, 12:26   #6
alexey9999
Пользователь
 
Регистрация: 09.12.2013
Сообщений: 13
По умолчанию

тема еще актуальна
alexey9999 вне форума Ответить с цитированием
Старый 17.12.2014, 12:40   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

для начала min и max посчитать до того, как использовать их при выдаче на графике, а так они нули
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск максимума и минимума на sql volfmen15 БД в Delphi 4 07.02.2012 17:48
нахождение максимума и минимума ф-ции в delphi Tatusya Помощь студентам 8 24.06.2010 18:12
Нахождение минимума и максимума графика в Delphi BOOFER Помощь студентам 1 20.06.2010 10:12
Поиск минимума/максимума в массиве gwarthy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 28.01.2010 22:27
Нахождение минимума и максимума в трехмерном массиве 1234 Помощь студентам 11 26.05.2008 16:23