|
Вопрос # 4 840/ вопрос решён / |
|
Приветствую, уважаемые эксперты!
Мне очень нужен код программы которая строила бы графики функций: sin, cos, tg, ctg, arcsin, arccos, arctg и arcctg; можно на канве, или через TChar. Сам уже всё перепробовал.
 |
Вопрос задал: ierihon1 (статус: 1-ый класс)
Вопрос отправлен: 19 декабря 2010, 04:14
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 116; последнее сообщение — 26 декабря 2010, 20:15; участников в обсуждении: 4.
Страницы: [« Предыдущая] [1] [2] [3] [4] [5] [6] [Следующая »]
|
min@y™ (статус: Доктор наук), 19 декабря 2010, 09:55 [#21]:
Код посмотрел. Он не имеет никакого отношения к данной задаче.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
ierihon1 (статус: 1-ый класс), 19 декабря 2010, 11:06 [#23]:
извиняюсь скинул не тот код(((
вот правильный:
|
|
ierihon1 (статус: 1-ый класс), 19 декабря 2010, 11:07 [#24]:
function Tform4.ACtXF(ACtX:real; var ACtXmax,ACtXmin,ACtYmax,ACtYmin:real):real;
begin
w:=StrToFloat(LabeledEdit16.Text);
v:=StrToFloat(LabeledEdit20.Text);
r:=StrToFloat(LabeledEdit26.Text);
t:=StrToFloat(LabeledEdit32.Text);
ACtXF:=w*(ArcCot(ACtX*v-r)+t);
ACtXmax:=pi;
ACtXmin:=-pi;
ACtYmax:=pi;
ACtYmin:=-pi;
end;
procedure TForm4.Button33Click(Sender: TObject);
var ACtX,ACtY:real;
px,py:LongInt;
begin
if (LabeledEdit16.Text='0') or (LabeledEdit16.Text='') then
begin
LabeledEdit16.Text:='1';
end;
if (LabeledEdit20.Text='0') or (LabeledEdit20.Text='') then
begin
LabeledEdit20.Text:='1';
end;
if LabeledEdit26.Text='' then
begin
LabeledEdit26.Text:='0';
end;
if LabeledEdit32.Text='' then
begin
LabeledEdit32.Text:='0';
end;
image3.Canvas.FillRect(rect(0,0,width,height));
FormActivate(Sender);
for PX:=1 to Image3.Width do
begin
ACtX:=ACtXmin+PX*(ACtXmax-ACtXmin)/(Image3.Width);
ACtY:=ACTXF(ACtX,ACtXmax,ACtXmin,ACtYmax,ACtYmin);
PY:=trunc((Image3.Height)-(ACtY-ACtYmin)*(Image3.height)/(ACtYmax-ACtYmin));
image3.Canvas.Pixels[PX,PY]:=clBlack;
end;
end;
|
|
min@y™ (статус: Доктор наук), 19 декабря 2010, 13:05 [#25]:
Слышь, а ты, случайно, не в Индии ли живёшь?
Код посмотрел.
Лучше бы не смотрел...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
ierihon1 (статус: 1-ый класс), 19 декабря 2010, 13:14 [#26]:
что так всё ужасно? ну объясни мне тупому что не так...
|
|
min@y™ (статус: Доктор наук), 19 декабря 2010, 13:24 [#27]:
Цитата (ierihon1):
что так всё ужасно?
Полный пипец.
Цитата (ierihon1):
ну объясни мне тупому что не так...
Тебе надо графики выводить? Так программирование с этого надо начинать, а не с кидания на форму 26 TLabeledEdit'ов.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
ierihon1 (статус: 1-ый класс), 19 декабря 2010, 13:31 [#28]:
вообще то их 32.. на каждую функцию по 4 всего функций 8, в одном TLabeledEdit'е вводится растяжение в другой вытягивание в 3ий смещение графика по оси Х в четвёртый смещение по оси У.. как то так... так проблема в том что он строит график не так как вфглядит настоящий график Y=ArcCtgX
|
|
min@y™ (статус: Доктор наук), 19 декабря 2010, 13:59 [#29]:
Сначала отладь отрисовку грификов, а только потом навешивай на это дело пользовательский интерфейс.
Если график строится неверно, значит ошибка в коде. Юзай отладчик.
Чем я ещё могу помочь?
Цитата (ierihon1):
вообще то их 32
Ваще пипец... Даже представить не могу, как прога на экране выглядит... В кошмарном сне такое не приснится.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
ierihon1 (статус: 1-ый класс), 19 декабря 2010, 14:13 [#30]:
не выглядит довольно прилично... мне надо помочь найти ошибку в этом коде:
|
|
ierihon1 (статус: 1-ый класс), 19 декабря 2010, 14:22 [#31]:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Math;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function F(X:real; var Xmax,Xmin,Ymax,Ymin:real):real;
end;
var
Form1: TForm1;
implementation
var Xmax,Xmin,Ymax,Ymin:real;
{$R *.dfm}
function Tform1.F(X:real; var Xmax,Xmin,Ymax,Ymin:real):real;
begin
F:=ArcCot(X);
Xmax:=pi;
Xmin:=-pi;
Ymax:=pi;
Ymin:=-pi;
end;
procedure TForm1.Button1Click(Sender: TObject);
var x,y:real;
PX,PY:longInt;
begin
for PX:=0 to Image1.Width do
begin
x:=Xmin+PX*(Xmax-Xmin)/Image1.Width;
y:=F(x,Xmax,Xmin,Ymax,Ymin);
PY:=trunc(Image1.Height-(y-Ymin)*Image1.height/(Ymax-Ymin));
image1.Canvas.Pixels[PX,PY]:=clBlack;
end;
end;
end.
|
|
min@y™ (статус: Доктор наук), 19 декабря 2010, 14:42 [#32]:
Цитата (ierihon1):
мне надо помочь найти ошибку в этом коде
Воспользуйся отладчиком, посмотри, какие промежуточные значения принимают твои переменные.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
ierihon1 (статус: 1-ый класс), 19 декабря 2010, 14:44 [#33]:
а это как сделать нужно?..
|
|
min@y™ (статус: Доктор наук), 19 декабря 2010, 14:53 [#34]:
Цитата (ierihon1):
а это как сделать нужно?..
Поставь точку останова на строку for PX:=0 to Image1.Width do и по шагам прогони алгоритм, вывесив все интересующие тебя переменные в окно watches.
Если ты всё это не умеешь, почитай какую-нить статью в инете.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 19 декабря 2010, 14:55 [#35]:
Вот тебе чтиво.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
ierihon1 (статус: 1-ый класс), 19 декабря 2010, 15:01 [#36]:
ладно разберёмся) ну так вроде бы со всем разобрались... осталось только только под вопросом то как избавиться от ошибки с арксинусом.. там когда задаю смещение по оси Х или У он выдаёт "invalid floating point opreration" и как от этого избавиться я не знаю... ниже код:
|
|
ierihon1 (статус: 1-ый класс), 19 декабря 2010, 15:02 [#37]:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Math;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function F(X:real; var Xmax,Xmin,Ymax,Ymin:real):real;
end;
var
Form1: TForm1;
implementation
var Xmax,Xmin,Ymax,Ymin:real;
{$R *.dfm}
function Tform1.F(X:real; var Xmax,Xmin,Ymax,Ymin:real):real;
begin
F:=ArcSin(X);
Xmax:=1;
Xmin:=-1;
Ymax:=pi/2;
Ymin:=-pi/2;
end;
procedure TForm1.Button1Click(Sender: TObject);
var x,y:real;
PX,PY:longInt;
begin
for PX:=0 to Image1.Width do
begin
x:=Xmin+PX*(Xmax-Xmin)/Image1.Width;
y:=F(x,Xmax,Xmin,Ymax,Ymin);
PY:=trunc(Image1.Height-(y-Ymin)*Image1.height/(Ymax-Ymin));
image1.Canvas.Pixels[PX,PY]:=clBlack;
end;
end;
end.
|
|
min@y™ (статус: Доктор наук), 19 декабря 2010, 15:06 [#38]:
Отлавливай в отладчике момент, когда Х выходит за пределы ±1.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
ierihon1 (статус: 1-ый класс), 19 декабря 2010, 15:09 [#39]:
ну по идее он и должен выходить за эти пределы если например сместить график на любое значение по Х... ведь график относительно оси КООРДИНАТ весь должен смешаться...
|
|
min@y™ (статус: Доктор наук), 19 декабря 2010, 15:13 [#40]:
Сам-то понял, что написал? Облсть определения арксинуса и арккосинуса - это именно ±1. И никак иначе!
Кури учебник алгебры за 7 класс.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Страницы: [« Предыдущая] [1] [2] [3] [4] [5] [6] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|