Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 939

/ вопрос открыт /

Здравствуйте!
Я являюсь студентом г.Уфы, Мы с Главным технологом разрабатываем технический проект современного станка, передо мной стала задача определить какие усилия возникают в процессе обработки. Код программы приводится, где рассчитывается усилие, НО мне необходимо построить график функции усилия PS от угла fi !!! Как это сделать?
Заранее спасибо!

Приложение:
  1. unit Unit2;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs,jpeg, ExtCtrls, StdCtrls, Buttons, Math;
  8.  
  9. type
  10. TForm2 = class(TForm)
  11. Edit2: TEdit;
  12. Label1: TLabel;
  13. Label2: TLabel;
  14. Label3: TLabel;
  15. Label4: TLabel;
  16. Label5: TLabel;
  17. Label6: TLabel;
  18. Label7: TLabel;
  19. Label8: TLabel;
  20. Edit3: TEdit;
  21. Edit4: TEdit;
  22. Edit5: TEdit;
  23. Edit6: TEdit;
  24. Edit7: TEdit;
  25. Button1: TButton;
  26. ComboBox1: TComboBox;
  27. ComboBox2: TComboBox;
  28. Edit1: TEdit;
  29. Memo1: TMemo;
  30. BitBtn1: TBitBtn;
  31. Image1: TImage;
  32. Button2: TButton;
  33. Label9: TLabel;
  34. Label10: TLabel;
  35. Edit8: TEdit;
  36. Edit9: TEdit;
  37. procedure Button1Click(Sender: TObject);
  38. procedure BitBtn1Click(Sender: TObject);
  39. {procedure Button2Click(Sender: TObject); }
  40. private
  41. { Private declarations }
  42. public
  43. { Public declarations }
  44. end;
  45.  
  46. var
  47. Form2: TForm2;
  48. m,mt,m1: string[20];
  49. 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;
  50. flag:boolean;
  51. f:textfile;
  52. x1,x2,dh,h: real;
  53. xmin,xmax,Ox: real;
  54. ymin,ymax,Oy: real;
  55. Mx,My,Sx,Sy: real;
  56. Ax1,Ax2,Ay1,Ay2,dx,dy: integer;
  57.  
  58. implementation
  59.  
  60. {$R *.dfm}
  61.  
  62. procedure TForm2.Button1Click(Sender: TObject);
  63. label 1,2;
  64. begin
  65. memo1.Clear;
  66. m:= edit2.text;
  67. V:= strtofloat(ComboBox1.text);
  68. g:= strtofloat(ComboBox2.text);
  69. A:= strtofloat(edit3.text);
  70. Hmin:= strtofloat(edit4.text);
  71. Ro:= strtofloat(edit5.text);
  72. R:= strtofloat(edit6.text);
  73. Po:= strtofloat(edit7.text);
  74. fi:= strtofloat(edit1.text);
  75. fi1:= strtofloat(edit8.text);
  76. fi2:= strtofloat(edit9.text);
  77. flag:=false;
  78. AssignFile(F,'Raschet.txt');
  79. m1:='****';
  80. Reset (F);
  81. 1:read(f,mt);
  82. if pos(m1,mt)<>0 then goto 2;
  83. read(f,A,hmin1,hmin2,R1,R2,Po1,Po2);
  84. readln(f);
  85. if (pos(m,mt)<>0){and(Hmin>=0)and(R>0)} then begin
  86. pi:=3.14159265;
  87. mu:=V*g*0.000001;
  88. w:=100*pi;
  89. t:=fi*pi/(w*0.18);
  90. {if fi<=180 then begin }
  91. u:=fi*pi/180;
  92. u1:=fi1*pi/180;
  93. u2:=fi2*pi/180;
  94. {end;
  95. if fi>180 then begin
  96. u:=(fi-180)*pi/180;
  97. end; }
  98. { q:=(w*t*0.18)/pi; }
  99. d:=A*cos(u)+A+Hmin;
  100. Sk:=-A*w*sin(u);
  101. p:=(Ro*Ro)-(R*R);
  102. y:=ln(Ro/R);
  103. k:=(p/2-((Ro*Ro)*y))*pi;
  104. C:=k/y;
  105. B:=(-1.5*pi*(p*p)-((3*p/y)*k));
  106. {PS:=Po*C*100000+(Sk*mu*B)/(d*d*d);}
  107. 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);
  108. {h:=roundto(h,-6);
  109. Sk:=roundto(V,-6);
  110. PS:=roundto(V,-6);}
  111. begin
  112. flag:=true;
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123. end;
  124. end;
  125. goto 1;
  126. 2: CloseFile(F);
  127.  
  128. end;
  129.  
  130. procedure TForm2.BitBtn1Click(Sender: TObject);
  131. begin
  132. form2.Hide;
  133. end;
  134.  
  135. {procedure TForm2.Button2Click(Sender: TObject);
  136. var
  137. x,y: real;
  138. i,n: integer;
  139. h1: real;
  140. begin
  141. Refresh;
  142. Ax1:=100;
  143. Ay1:=100;
  144. Ay2:=form2.ClientHeight-ay1-150;
  145. Ax2:=form2.ClientWidth-ax1-500;
  146. x1:=u1;
  147. x2:=u2;
  148. dh:=0.001;
  149. n:=round((x2-x1)/dh)+1;
  150. xmin:=x1;
  151. xmax:=x1;
  152. ymin:=PS(x1);
  153. ymax:=PS(x1);
  154. x:=x1;
  155. for i:=0 to n do
  156. begin
  157. if x < xmin then xmin:=x;
  158. if x > xmax then xmax:=x;
  159. y:=Fn(x);
  160. if y < ymin then ymin:=y;
  161. if y > ymax then ymax:=y;
  162. if (y < 0.001) and (y<-0.0001) then
  163. begin
  164. Oy:=y;
  165. Ox:=x;
  166. end;
  167. x:=x+dh;
  168. end;
  169. Mx:=(ax2-ax1)/(xmax-xmin);
  170. My:=(ay2-ay1)/(ymin-ymax);
  171. Sx:=ax1-xmin*mx;
  172. Sy:=ay1-ymax*my;
  173. dx:=round(Ox*mx+sx);
  174. dy:=ay2;
  175. x:=x1;
  176. with Form2.Canvas do
  177. begin
  178. for i:=0 to n do
  179. begin
  180. y:=PS(x);
  181. Pixels[round(x*mx+sx),round(y*my+sy)]:=clFuchsia;
  182. x:=x+dh;
  183. end;
  184. Pen.Color:=clAqua;
  185. moveto(ax1,round(sy)); lineto(ax2,round(sy));
  186. moveto(ax1,ay1-5); lineto(ax1,ay2+30);
  187. textout(ax2,dy,'X');
  188. textout(ax1+20,ay1,'Y');
  189. h:=(x2-x1)/10;
  190. x:=x1;
  191. for i:=0 to 10 do
  192. begin
  193. moveto(round(x*mx+sx),round(sy)); lineto(round(x*mx+sx),round(sy)-5);
  194. textout(round(x*mx+sx)-5,round(sy)+5,floattostrF(x,ffgeneral,3,1));
  195. x:=x+h;
  196. end;
  197. y:=0;
  198. i:=0;
  199. h1:=abs(ymin-ymax)/10;
  200. for i:=0 to 3 do
  201. begin
  202. moveto(ax1,round(y*my+sy)); lineto(ax1+5,round(y*my+sy));
  203. textout(ax1-40,round(y*my+sy)-5,floattostrF(y,fffixed,3,1));
  204. y:=y-h1;
  205. end;
  206. y:=0;
  207. i:=0;
  208. h1:=abs(ymin-ymax)/10;
  209. for i:=0 to 7 do
  210. begin
  211. moveto(ax1,round(y*my+sy)); lineto(ax1+5,round(y*my+sy));
  212. textout(ax1-40,round(y*my+sy)-5,floattostrF(y,fffixed,3,1));
  213. y:=y+h1;
  214. end;
  215.  
  216. end; }
  217.  
  218. end.
  219.  


Белочка Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Белочка (статус: Посетитель)
Вопрос отправлен: 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™

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™

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™

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

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:34
Выполнено за 0.03 сек.