Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1076
olookin
2002-06-19 08:08
2002.07.01
Получить handle of control


1-963
Lizard
2002-06-19 12:53
2002.07.01
Как приаттачить к письму несколько файлов ?


1-1092
Tornado
2002-06-19 13:14
2002.07.01
Помогите, плиз


1-984
QWest
2002-06-18 09:46
2002.07.01
Помогите!


1-1047
Frags
2002-06-18 13:38
2002.07.01
Где можно найти SpeedButton как в XP?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский