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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> касательная к графику., запарился уже. график строит касательную не хочет...
сообщение
Сообщение #1


Пионер
**

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

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


надо построить график и касательную к функции вида A*x^3+Bx^2+C*x+D, где A,B,C и В задаются пользователем, а конкретно в TEdit'ы. причем точка касания задается произвольно по щелчку на графике. график норм строится а касательную как-то через одно место.
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, TeeFunci, Series, StdCtrls;

type
TForm1 = class(TForm)
Image1: TImage;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
Edit2: TEdit;
Label4: TLabel;
Edit3: TEdit;
Label5: TLabel;
Edit4: TEdit;
Button1: TButton;
Label6: TLabel;

procedure Button1Click(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

type
Tpoint= record
x,y:smallint;
end;
var
Form1: TForm1;
a,b,c,d:integer;
o:Tpoint;

const
x0=600;
y0=200;
implementation

{$R *.dfm}

Function PaintXY(Const t: integer): real;
var x: real;
Begin
x:=t/30-10;
PaintXY :=-(A*x*x*x+B*x*x+C*x+D);
End;




procedure TForm1.Button1Click(Sender: TObject);
var i,x:integer;
begin
with Image1.Canvas do FillRect(Rect(0,0,Width,Height));
a:=strtoint(edit1.Text);
b:=strtoint(edit2.Text);
c:=strtoint(edit3.Text);
d:=strtoint(edit4.Text);

image1.Canvas.MoveTo(0,round(PaintXY(0)));
i:=0;
while i<604 do
begin
Form1.image1.Canvas.Pen.Width:=3;
Form1.image1.Canvas.Pen.Color:=clBlack;
Form1.image1.Canvas.LineTo(i,round(PaintXY(i)*10+o.y));
i:=i+5;
end;
end;



Procedure Kasat(Const l : integer);
Var
q,s : real;
i:integer ;
Begin
form1.Image1.Canvas.Pen.Color:=clred;
i:= 0;
s:=l/30-10;
Q := 3*A*s*s+2*B*s+C;
While i < 604 Do
Begin

form1.Image1.Canvas.LineTo(round(i),(round(PaintXY(i))*10-200)+q*((i/30-10)-s))));
i:= i +5;
End;

End;



procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var
st : String;
begin

label6.Caption:=inttostr(x);
St := 'X= ' + IntToStr(X) + '; ' + 'Y= '+ IntToStr(Y) + ' Построить касательную в этой точке?';
if (Image1.Canvas.Pixels[x,y] = clBlack) and (MessageDLG(St,mtinformation,[mbNo,mbok],0) = mrOk)
Then
Begin
Kasat(Round(X));
End;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
o.x:=round (form1.Width/2);
o.y:=round(form1.Height/2);
end;

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





- Текстовая версия 16.04.2024 12:45
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name