![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ГРАФИК ТРАКТРИСЫ [D7, WinXP]
Ivan © (2012-05-17 20:57:00)вообщем программа не работает.не рисует график трактрисы.Что-то не так. если что исправьте.убираю логарифм работает ,только это не трактриса...
чем быстрее поможете тем лучше.юлагодарю
<procedure TForm1.Button1Click(Sender: TObject);
var xc,yc,w,h,i:integer;
a,t,r,mx,my,x,y:real;
begin
xc:=Width div 2;
yc:=ClientHeight div 2-30;
w:=(xc-10);
h:=(yc-10);
mx:=(w-10)/5;
my:=(h-10)/5;
with Canvas do
begin
Brush.Color:=clWhite;
Pen.Color:=clBlack;
rectangle(5,5,2*w+5,2*h+5);
Pen.Width:=3;
MoveTo(10,yc);
LineTo(2*w,yc);
MoveTo(xc,10);
LineTo(xc,2*h);
textout(2*w-20,yc-20,'X');
textout(xc-20,10,'Y');
textout(xc+10,yc+10,'0');
Pen.Width:=1;
Pen.Style:=psDash;
for i:=1 to 5 do
begin
MoveTo(xc+round(i*mx),10); LineTo(xc+round(i*mx),2*h);
MoveTo(xc-round(i*mx),10); LineTo(xc-round(i*mx),2*h);
textout(xc+round(i*mx),yc+10,Inttostr(i));
textout(xc-round(i*mx),yc+10,Inttostr(-i));
MoveTo(10,yc-round(i*my)); LineTo(2*w,yc-round(i*my));
MoveTo(10,yc+round(i*my)); LineTo(2*w,yc+round(i*my));
textout(xc-30,yc-round(i*my),Inttostr(i));
textout(xc-30,yc+round(i*my),Inttostr(-i));
end;
t:= 0; a:= 60;
while t<=2*pi+1e-8 do
begin { if (cos(phi/2)<>0)and(sin(phi/2)<>0) then
begin
}
x:=a*ln(sin(t/2)/cos(t/2))+cos(t);
y:=a*sin(t);
pixels[xc+round(x*mx),yc-round(y*my)]:=clred;
t:=t+0.001;
end;
end;
end;
end.>
Ivan (2012-05-19 20:59:00) [1]заработала машинка))))
формула правильная. собака была зарыта в параметре и в пределах изменения этого же параметра t
получился график.
благодарю,<MBo> за вашу терпеливость.И вообще в помощи.
<Вот и подошли к самому главному.> //разве нельзя с пониманием отнестись.
Я же не с пустым кодом пришёл на форум.
MBo (2012-05-19 18:19:00) [2]В [10] посту я описал все изменения, после которых график стал нормальным
Inovet (2012-05-19 18:08:00) [3]> [17] Ivan (19.05.12 15:42)
> (скинь текс чтоб посмотреть тогда)
Вот и подошли к самому главному.
Ivan (2012-05-19 15:42:00) [4]график значит рисует?
(скинь текс чтоб посмотреть тогда)
MBo (2012-05-19 11:54:00) [5]у меня работает
Ivan (2012-05-19 11:21:00) [6]<дело не в тангенсе, а в неправильной формуле>
это ваша формула x:=a*(ln(tan(t/2))+cos(t));
Она тоже на работает.какая же будет формула правильная тогда?
Германн (2012-05-19 02:12:00) [7]
> MBo © (18.05.12 21:01) [13]
Я всего лишь хотел сказать автору, что функция tan в Дельфи есть. Но в отличие от функций sin и cos она не зашита в "magic compile" модуль system.
А в математике я даже и не пытаюсь соревноваться вами "дальневосточниками" :)
MBo (2012-05-18 21:01:00) [8]дело не в тангенсе, а в неправильной формуле
Германн (2012-05-18 17:28:00) [9]
> дело втом что делфи выдает ошибку.что типа тангенса нет.
uses Math
Ivan (2012-05-18 17:00:00) [10]<x:=a*(ln(tan(t/2))+cos(t))>
дело втом что делфи выдает ошибку.что типа тангенса нет.
Поэтому я взял x:=a*ln(sin(t/2)/cos(t/2))+cos(t);
Почему график недорисовывает?
MBo (2012-05-18 13:33:00) [11]t= Pi/12...11*Pi/12
a = 5 (для данной шкалы)
x:=a*(ln(tan(t/2))+cos(t));
Ivan (2012-05-18 10:21:00) [12]<логарифм от нуля чему равен?>
в коде один из вариантов который я написал переменной t.при значении 1 и т.д. тоже не канает
Ivan (2012-05-18 10:20:00) [13]<Правильно запиши формулу для X, поставь адекватные пределы по t, и разумное значение a, и всё получится>
разве формула для x неправильная?
поставил t<pi,при t=1;2;(для остальных значений не удовлетворяет) работает .благодарю за подсказку. А график не симметричен относительно оси ОY/(не дорисовывает в отрицательной полуплоскости).в чём тут причина?
И можете заодно прояснить ситуацию с TChArt/
RWolf (2012-05-18 09:59:00) [14]логарифм от нуля чему равен?
Ivan (2012-05-18 09:51:00) [15]Попробовал.через TChart/ снова в чем-то ошибка.не выводит график.Люди добрые, отзовитесь?
<procedure TForm1.Button1Click(Sender: TObject);
const th=0.01;
var
t,a,tmax:real;
begin
a:=strtofloat(edit1.text);
tmax:=strtofloat(edit2.text);
t:=0;
while t<tmax//максимальное время
do
begin
chart1.series[1].AddXY(a*sin(t),a*(cos(t)+ln(Sin(t/2)/Cos(t/2))),'', clBlue);
t:=t+th;
end;
end;
end.>
MBo (2012-05-17 21:50:00) [16]Правильно запиши формулу для X, поставь адекватные пределы по t, и разумное значение a, и всё получится
RWolf (2012-05-17 21:49:00) [17]фишка в масштабе.
этот график вылетает далеко за выбранные границы координатной сетки.
Ivan (2012-05-17 21:22:00) [18]...
begin if (cos(t/2)<>0)and(sin(t/2)<>0) then
begin
...
Ivan (2012-05-17 21:13:00) [19]НЕ Я СЕРЬЕЗНО.)))))В ЧЕМ ФИШКА А?
brother (2012-05-17 21:06:00) [20]> чем быстрее поможете тем лучше.юлагодарю
давай через месяц?
зы. скоро - толкько кошки родятся...