Форум: "Основная";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];
Внизграфик Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c