| 
| 
 | Вопрос # 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);beginform2.Hide;end; {procedure TForm2.Button2Click(Sender: TObject);var  x,y: real;  i,n: integer;  h1: real;beginRefresh;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 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |