Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.01;
Скачать: CL | DM;

Вниз

график   Найти похожие ветки 

 
Arkan   (2002-06-17 18:25) [0]

народ помогите нужно срочно написать прогу рисования графика функции
в параметрическом виде с масштабированием
вот
x=(a+b)cos(fi)-lamda*a*cos((a+b)*fi/a)
y=(a+b)sin(fi)-lamda*a*sin((a+b)*fi/a)
a>0, b>0, Lamda>0
это эпициклоида
заранее благадарен!!


 
Янушка   (2002-06-17 18:42) [1]

Что значит с масштабированием?От чего зависит масштаб?
И вообще напиши, что именно непонятно?
Примерно так:
procedure TForm1.button1Click(параметры);
begin
while (fi<2*3,14) do
begin
fi:=fi+(2*3,14/360);
x=(a+b)cos(fi)-lamda*a*cos((a+b)*fi/a)+200;
y=(a+b)sin(fi)-lamda*a*sin((a+b)*fi/a)+200;
Form1.Canvas.MoveTo(x,y)
end;
end;

Предварительно необходимо задать a,b.Создать канву для формы оператором
Form1.Canvas.Create.
Вообщем, если время терпит пиши пришлю поподробнее.



 
ATR   (2002-06-17 18:50) [2]

А с масштабированием просто. Формулу домнажаешь на масштаб. Например
x :=((a+b)cos(fi)-lamda*a*cos((a+b)*fi/a)) * (1/2);


 
Alex is Fecit   (2002-06-17 18:57) [3]

Куда канву то еще раз создавать? Она итак там есть!


 
Случайный прохожий   (2002-06-17 21:37) [4]


> Alex is Fecit (17.06.02 18:57)

А очень хочется!


 
Arkan   (2002-06-18 02:40) [5]

Масштабирование просто умнажением на число неделается
оно заваисит от a и от b в зависимости от их величены будет менятьсяразметки
на графики например если a:=3,b:=9 то Левый край графика дойдёт до 7 по х
причём если a,b слишком маленькие график должен чуть-чуть увеличится
Да к стати время нетерпит у меня ещё 5 дней осталось


 
MBo ©   (2002-06-18 07:28) [6]

Надо создать массивы точек x и y, заполнить их, найти мин. и макс. значения, вычислить масштабные коэффициенты, и потом нарисовать


 
Кулюкин Олег ©   (2002-06-18 08:19) [7]

А почему не использовать TChart?


 
Arkan   (2002-06-18 09:28) [8]

а незя использовать TChart


 
MBo ©   (2002-06-18 09:29) [9]

>Arkan
Ну ты хоть сам головой поработай


 
MBo ©   (2002-06-18 13:44) [10]

>Arkan
ну что, получилось ?


 
Arkan   (2002-06-18 17:24) [11]

не нифига невыходит как то буторно всё выходит


 
MBo ©   (2002-06-18 17:34) [12]

procedure TForm1.Button1Click(Sender: TObject);
var
a, b, fi, lambda: double;
var
x, y: array of double;
i, num: integer;
scalex, scaley, ymin, ymax, xmin, xmax: double;
begin
a := 2; // радиус катящегося круга
b := 4; // радиус опоры, поварьируй
lambda := 1; // отношение R до рисуемой точки к a, попробуй еще 1.5

//
if frac(b / a) > 0.15 then
num := (round(b / a * 100) + 1) * round(a)
//это для получения замкнутой кривой при нецелом отношении b/a
//но целых небольших взаимнопростых a и b
//можно убрать для получения только одного оборота
else
num := round((b / a) * 100) + 1;

setlength(x, num + 1);
setlength(y, num + 1);
for i := 0 to num do
begin
fi := (pi * i) / 50;
x[i] := (a + b) * sin((a / b) * fi) - lambda * a * sin((a + b) * fi / b);
y[i] := (a + b) * cos((a / b) * fi) - lambda * a * cos((a + b) * fi / b);
end;

ymin := minvalue(y);
ymax := maxvalue(y);
xmin := minvalue(x);
xmax := maxvalue(x);
scalex := (paintbox1.Width - 1) / (xmax - xmin);
scaley := (paintbox1.Height - 1) / (ymax - ymin);
with paintbox1.canvas do
begin
moveto(trunc(scalex * (x[1] - xmin)), paintbox1.height - 1 - trunc(scaley *
(y[1] - ymin)));
for i := 1 to num do
Lineto(trunc(scalex * (x[i] - xmin)), paintbox1.height - 1 - trunc(scaley
* (y[i] - ymin)));
end;
end;


 
Arkan   (2002-06-18 17:57) [13]

Уау круто спасибо!!!



Страницы: 1 вся ветка

Текущий архив: 2002.07.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
1-1020
MyasNick
2002-06-17 20:03
2002.07.01
Проблема с ShellExecute и mailto:


1-942
Янушка
2002-06-17 18:01
2002.07.01
Динамическое изменение положения label


1-1054
Torn
2002-06-18 21:19
2002.07.01
Нестандартные окна


3-875
Ulugbek
2002-06-06 16:26
2002.07.01
Мастера опять проблема!


1-978
Jony
2002-06-19 16:25
2002.07.01
Динамическая настройка панели инструментов