|
Вопрос # 2 939/ вопрос открыт / |
|
Здравствуйте!
Я являюсь студентом г.Уфы, Мы с Главным технологом разрабатываем технический проект современного станка, передо мной стала задача определить какие усилия возникают в процессе обработки. Код программы приводится, где рассчитывается усилие, НО мне необходимо построить график функции усилия PS от угла fi !!! Как это сделать?
Заранее спасибо!
Приложение: Переключить в обычный режим- unit Unit2;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs,jpeg, ExtCtrls, StdCtrls, Buttons, Math;
-
- type
- TForm2 = class(TForm)
- Edit2: TEdit;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Label4: TLabel;
- Label5: TLabel;
- Label6: TLabel;
- Label7: TLabel;
- Label8: TLabel;
- Edit3: TEdit;
- Edit4: TEdit;
- Edit5: TEdit;
- Edit6: TEdit;
- Edit7: TEdit;
- Button1: TButton;
- ComboBox1: TComboBox;
- ComboBox2: TComboBox;
- Edit1: TEdit;
- Memo1: TMemo;
- BitBtn1: TBitBtn;
- Image1: TImage;
- Button2: TButton;
- Label9: TLabel;
- Label10: TLabel;
- Edit8: TEdit;
- Edit9: TEdit;
- procedure Button1Click(Sender: TObject);
- procedure BitBtn1Click(Sender: TObject);
- {procedure Button2Click(Sender: TObject); }
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form2: TForm2;
- m,mt,m1: string[20];
-
V,g,A,u1,u2,Hmin,hmin1,hmin2,Ro,R,u,R1,R2,Po,Po1,Po2,fi,fi1,fi2,t,p,y,mu,w,q,Sk,k,C,B,PS,pi,d:real;
- flag:boolean;
- f:textfile;
- x1,x2,dh,h: real;
- xmin,xmax,Ox: real;
- ymin,ymax,Oy: real;
- Mx,My,Sx,Sy: real;
- Ax1,Ax2,Ay1,Ay2,dx,dy: integer;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm2.Button1Click(Sender: TObject);
- label 1,2;
- begin
- memo1.Clear;
- m:= edit2.text;
- V:= strtofloat(ComboBox1.text);
- g:= strtofloat(ComboBox2.text);
- A:= strtofloat(edit3.text);
- Hmin:= strtofloat(edit4.text);
- Ro:= strtofloat(edit5.text);
- R:= strtofloat(edit6.text);
- Po:= strtofloat(edit7.text);
- fi:= strtofloat(edit1.text);
- fi1:= strtofloat(edit8.text);
- fi2:= strtofloat(edit9.text);
- flag:=false;
- AssignFile(F,'Raschet.txt');
- m1:='****';
- Reset (F);
- 1:read(f,mt);
- if pos(m1,mt)<>0 then goto 2;
- read(f,A,hmin1,hmin2,R1,R2,Po1,Po2);
- readln(f);
- if (pos(m,mt)<>0){and(Hmin>=0)and(R>0)} then begin
- pi:=3.14159265;
- mu:=V*g*0.000001;
- w:=100*pi;
- t:=fi*pi/(w*0.18);
- {if fi<=180 then begin }
- u:=fi*pi/180;
- u1:=fi1*pi/180;
- u2:=fi2*pi/180;
- {end;
- if fi>180 then begin
- u:=(fi-180)*pi/180;
- end; }
- { q:=(w*t*0.18)/pi; }
- d:=A*cos(u)+A+Hmin;
- Sk:=-A*w*sin(u);
- p:=(Ro*Ro)-(R*R);
- y:=ln(Ro/R);
- k:=(p/2-((Ro*Ro)*y))*pi;
- C:=k/y;
- B:=(-1.5*pi*(p*p)-((3*p/y)*k));
- {PS:=Po*C*100000+(Sk*mu*B)/(d*d*d);}
-
PS:=Po*(((((Ro*Ro)-(R*R))/2-((Ro*Ro)*(ln(Ro/R))))*pi)/(ln(Ro/R)))*100000+((-A*w*sin(u))*mu*((-1.5*pi*(((Ro*Ro)-(R*R))*((Ro*Ro)-(R*R)))-((3*((Ro*Ro)-(R*R))/(ln(Ro/R)))*((((Ro*Ro)-(R*R))/2-((Ro*Ro)*(ln(Ro/R))))*pi)))))/(d*d*d);
- {h:=roundto(h,-6);
- Sk:=roundto(V,-6);
- PS:=roundto(V,-6);}
- begin
- flag:=true;
-
-
-
-
-
-
-
-
-
-
- end;
- end;
- goto 1;
- 2: CloseFile(F);
-
- end;
-
- procedure TForm2.BitBtn1Click(Sender: TObject);
- begin
- form2.Hide;
- end;
-
- {procedure TForm2.Button2Click(Sender: TObject);
- var
- x,y: real;
- i,n: integer;
- h1: real;
- begin
- Refresh;
- Ax1:=100;
- Ay1:=100;
- Ay2:=form2.ClientHeight-ay1-150;
- Ax2:=form2.ClientWidth-ax1-500;
- x1:=u1;
- x2:=u2;
- dh:=0.001;
- n:=round((x2-x1)/dh)+1;
- xmin:=x1;
- xmax:=x1;
- ymin:=PS(x1);
- ymax:=PS(x1);
- x:=x1;
- for i:=0 to n do
- begin
- if x < xmin then xmin:=x;
- if x > xmax then xmax:=x;
- y:=Fn(x);
- if y < ymin then ymin:=y;
- if y > ymax then ymax:=y;
- if (y < 0.001) and (y<-0.0001) then
- begin
- Oy:=y;
- Ox:=x;
- end;
- x:=x+dh;
- end;
- Mx:=(ax2-ax1)/(xmax-xmin);
- My:=(ay2-ay1)/(ymin-ymax);
- Sx:=ax1-xmin*mx;
- Sy:=ay1-ymax*my;
- dx:=round(Ox*mx+sx);
- dy:=ay2;
- x:=x1;
- with Form2.Canvas do
- begin
- for i:=0 to n do
- begin
- y:=PS(x);
- Pixels[round(x*mx+sx),round(y*my+sy)]:=clFuchsia;
- x:=x+dh;
- end;
- Pen.Color:=clAqua;
- moveto(ax1,round(sy)); lineto(ax2,round(sy));
- moveto(ax1,ay1-5); lineto(ax1,ay2+30);
- textout(ax2,dy,'X');
- textout(ax1+20,ay1,'Y');
- h:=(x2-x1)/10;
- x:=x1;
- for i:=0 to 10 do
- begin
- moveto(round(x*mx+sx),round(sy)); lineto(round(x*mx+sx),round(sy)-5);
- textout(round(x*mx+sx)-5,round(sy)+5,floattostrF(x,ffgeneral,3,1));
- x:=x+h;
- end;
- y:=0;
- i:=0;
- h1:=abs(ymin-ymax)/10;
- for i:=0 to 3 do
- begin
- moveto(ax1,round(y*my+sy)); lineto(ax1+5,round(y*my+sy));
- textout(ax1-40,round(y*my+sy)-5,floattostrF(y,fffixed,3,1));
- y:=y-h1;
- end;
- y:=0;
- i:=0;
- h1:=abs(ymin-ymax)/10;
- for i:=0 to 7 do
- begin
- moveto(ax1,round(y*my+sy)); lineto(ax1+5,round(y*my+sy));
- textout(ax1-40,round(y*my+sy)-5,floattostrF(y,fffixed,3,1));
- y:=y+h1;
- end;
-
- end; }
-
- end.
-
 |
Вопрос задала: Белочка (статус: Посетитель)
Вопрос отправлен: 22 июня 2009, 08:24
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 12; последнее сообщение — 23 июня 2009, 07:07; участников в обсуждении: 5.
|
Ученый (статус: 8-ой класс), 22 июня 2009, 08:30 [#1]:
а в чем собственно проблема-то? рисовать не умеем?
|
|
Белочка (статус: Посетитель), 22 июня 2009, 08:35 [#2]:
не умеем))) Как и с помощью какого оператора можно нарисовать, с подписями осей, значений? У меня стоит дельфи 7
|
|
Ученый (статус: 8-ой класс), 22 июня 2009, 08:37 [#3]:
ууу....это целая лекция......но могу ссылочку где обо всем этом можно прочитать почитать))
|
|
min@y™ (статус: Доктор наук), 22 июня 2009, 08:40 [#4]:
Сначала надо написать саму зависимость, т.е. функцию:
function PS(const fi: Extended): Extended;
begin
Result:= <выражение с переменной fi>;
end;
Затем можно эту зависимость нарисовать ручками на канве формы, TImage, TPaintBox или воспользоваться компонентом TChart.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 22 июня 2009, 08:44 [#5]:
Да, забыл сказать... Не надо выкладывать тут такие длинные и отвратительно форматированные исходники: это бесполезно, их никто не будет анализировать. Особенно, если в них используется куча одно-двухбуквенных переменных и операторы типа GOTO.
Особенно меня удивило выражение:
PS:=Po*(((((Ro*Ro)-(R*R))/2-((Ro*Ro)*(ln(Ro/R))))*pi)/(ln(Ro/R)))*100000+((-A*w*sin(u))*mu*((-1.5*pi*(((Ro*Ro)-(R*R))*((Ro*Ro)-(R*R)))-((3*((Ro*Ro)-(R*R))/(ln(Ro/R)))*((((Ro*Ro)-(R*R))/2-((Ro*Ro)*(ln(Ro/R))))*pi)))))/(d*d*d);
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ученый (статус: 8-ой класс), 22 июня 2009, 08:44 [#6]:
да точно...щас кодец глянул, а рисовать то и нечего функции то нет))
|
|
Белочка (статус: Посетитель), 22 июня 2009, 08:56 [#7]:
так вот эта болая функция и есть, она зависит от угла fi
|
|
Белочка (статус: Посетитель), 22 июня 2009, 08:57 [#8]:
Больше та к не буду, пардон
|
|
min@y™ (статус: Доктор наук), 22 июня 2009, 09:08 [#9]:
Набери формулу в любом редакторе формул (или напиши на бумажке и отсканируй) и выложи где-нить посмотреть. Если будет не влом, попробую написать тебе отрисовку графика.
Да, и ещё. Нужны пределы изменения аргумента (то бишь угла fi).
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Мережников Андрей (статус: Абитуриент), 22 июня 2009, 17:26 [#10]:
собственно, где в формуле угол fi, от значений которого зависит результат функции?
Вообще-то, нормальным считается вычислить повторяющееся значение, а затем подставлять уже полученный результат. Например, в приведенной формуле 7 (!) раз встречается Rо*Rо. Нормально было-бы вычислить это сначала, запомнить в переменную (например, k1), а затем везде, где в формуле встречается указанное выражение заменить на k1.
|
|
Валя (статус: 1-ый класс), 22 июня 2009, 23:11 [#11]:
я тоже это прочитал
|
|
Белочка (статус: Посетитель), 23 июня 2009, 07:07 [#12]:
u:=fi*pi/180
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|