.: Menu :.
Home
Реферати
Книги
Конспекти уроків
Виховні заходи
Зразки документів
Реферати партнерів
Завантаження
Завантажити
Електронні книги


????????...

 
��������...
Створення фігур Ліссажу в середовищі Borland Pascal 


Створення фігур Ліссажу в середовищі Borland Pascal

Виток перший. Педальний.
Визначення педальної кривої давати не будемо – зразу перейдемо до її малювання. В поточній точці кола (яка пробігає в циклі по всі    й її довжині) проведемо дотичну пряму, а потім із фіксованої точки (в нашому випадку, вона лежить на колі) – перпендикуляр до цієї дотичної. Сукупність отриманих точок перетину утворює кардіоїду.
program Vitok_6_Pedalniy;
uses graph;

var t,beta,k,b,k1,x,y,x1,y1,a,b1:double;
DrawWidth,r,f:integer;
d,m:integer;

procedure Init;
begin
r:=160;
a:=0*r;
DrawWidth:=1;
setlinestyle(0,0,DrawWidth);
setcolor(1);
circle(170+r,230,r);
f:=1;
end;

procedure show;
begin
repeat
t:=f*Pi/180;
x:=r*(1+cos(t));
y:=r*sin(t);
beta:=pi/2 + t;
k:=(sin(beta)/cos(beta));
b:=y-k*x;
k1:=-1/k;
b1:=k1*a;
x1:=(b1-b)/(k-k1);
y1:=k1*x1+b1;
setcolor(4); circle(round(x1)+170,round(y1)+230,3);
setcolor(12);circle(round(x)+170,round(y)+230,3);
setcolor(2); Line(170-round(a),230,round(x1)+170,round(y1)+230);
setcolor(5); Line(round(x)+170,round(y)+230,round(x1)+170,round(y1)+230);
inc(f,3);
until f>=360;
{Draw only line with green color}
init;
repeat
t:=f*Pi/180;
x:=r*(1+cos(t));
y:=r*sin(t);
beta:=pi/2 + t;
k:=(sin(beta)/cos(beta));
b:=y-k*x;
k1:=-1/k;
b1:=k1*a;
x1:=(b1-b)/(k-k1);
y1:=k1*x1+b1;
setcolor(2); Line(170-round(a),230,round(x1)+170,round(y1)+230);
inc(f,3);
until f>=360;
end;

begin
d:=DETECT;
initGraph(d,m,'');
Init;
SetBkColor(white);
show;
setcolor(14);
outtextxy(400,  5,'Vitok 6: Pedalniy');
setcolor(12);
outtextxy(10,460,'Press <ENTER> for EXIT');
readln;
closegraph;
end.
















В даній програмі лічильник циклу f, як завжди, задає центральний кут в градусах (крок циклу рівний трьом градусам), а t – в радіанах. Змінна beta – це кут нахилу дотичної у відповідній точці циклу, а k – тангенс цього кута. Рівняння прямої, як відомо, y=kx+b, для кожної дотичної знаходимо b=y-kx. Для взаємно перпендикулярних прямих k1=–1/k, a  b1=0, так як всі перпендикуляри в нашому випадку проходить через точку кола, в якого  y=0. Розв’язуючи сумісно рівняння дотичної і перпендикуляра до неї, знаходимо координати точки перетину і малюємо в них маленьке червоне коло. Ці кола і утворюють педальну криву до кола  відносно точки.

Виток другий. Енвелопа  кола, або Небезпечно – оси!
Тут ми будемо брати точки на нашому колі, ставити в них голку циркуля і рисувати нові кола так, щоб вони всі проходили через все ту ж фіксовану точку на колі. Загальна обгинаюча (так звана енвелопа) до отриманих кіл буде – звичайно, всі вже здогадались – кардіоїдою. При зміщенні фіксованої точки ми отримаємо всю гамму Равликів Паскаля. Цей процес ілюструється рисунком і програмою. Маленькими червоними кружками відмічені точки, що лежать на вихідному колі – центри кіл, що проводитимуться.
program Vitok_7_Envelopa_Okryjnosti;
uses graph;

var t,a,x,y,rr:double;
DrawWidth,r,f:integer;
d,m:integer;

procedure Init;
begin
r:=90;
a:=0*r;
DrawWidth:=1;{Ywaga DrawWidth in Pascal v 7.00 woge byti or 1 or 3}
setlinestyle(0,0,DrawWidth);
end;

procedure show1;
begin
f:=1;
repeat
t:=f*Pi/180+pi;
x:=r*(1+cos(t));
y:=r*sin(t);
rr:=Sqrt(Sqr(x-a)+Sqr(y));
setcolor(1); circle(round(x)+170,round(y)+240,round(rr));
setcolor(4);circle(round(x)+170,round(y)+240,4);
inc(f,18);
until f>=360;
end;
begin
d:=DETECT;
initGraph(d,m,'');
Init;
show1;
setcolor(14);
outtextxy(400, 5,'Vitok 7.1: Envelopa Okryjnosti');
setcolor(12);
outtextxy(10,460,'Press <ENTER> for Continue');
readln;
closegraph;
end.























Значення а – зміщення фіксованої точки для ваших експериментів, на початку дорівнює нулю. В цій програмі розраховується радіус кола в кожній точці циклу (для цього достатньо скористатися теоремою Піфагора), а колір кіл змінюється в циклі.
Тепер нас відділяє від створення шедевру один маленький крок – робимо товщину лінії більше (наприклад, 55 пікселів) і розмальовуємо кожен парний круг в жовтий колір, а непарний – в синій. Отримуємо шедевр поп-арту, якому позаздрив би сам Малевич. Чимось схожий на осу, і взагалі жовтий з синім кольором – це сигнал про небезпеку; тим, хто буде повторювати ці опити, краще підібрати більш спокійне поєднання кольорів.

program Vitok_7_Envelopa_Okryjnosti;
uses graph;

var t,a,x,y,rr:double;
DrawWidth,r,f:integer;
d,m:integer;

procedure Init;
begin
r:=90;
a:=0*r;
DrawWidth:=1;{Ywaga DrawWidth in Pascal v 7.00 woge byti or 1 or 3}
setlinestyle(0,0,DrawWidth);
end;

procedure show2;
var col:boolean;
cl:integer;
begin
clearviewport;
f:=1;
col:=true;
repeat
t:=f*Pi/180+pi;
x:=r*(1+cos(t));
y:=r*sin(t);
rr:=Sqrt(Sqr(x-a)+Sqr(y));
if col then cl:=1 else cl:=14;
col:=not col;
setfillstyle(1,cl);setcolor(cl);
fillEllipse(round(x)+170,round(y)+240,round(rr),round(rr));
inc(f,18);
until f>=360;
end;

begin
d:=DETECT;
initGraph(d,m,'');
Init;
show2;
setcolor(14);
outtextxy(400, 5,'Vitok 7.2: Envelopa Okryjnosti');
setcolor(12);
outtextxy(10,460,'Press <ENTER> for EXIT');
readln;
closegraph;
end.
















Виток третій. Скромний ¬– серединки.
Продовжуємо свої опити. Для текучої точки на колі виділяємо центральний кут з горизонтальною віссю, під таким же кутом проводимо промінь із фіксованої точки (все тієї ж, на колі) до перетину з колом. Точку перетину променя з колом з’єднується з початковою точкою і знаходимо середину отриманої хорди – середини хорд лежать на Равлику Паскаля.
Текучий центральний кут виділяти не треба – ми й так від нього в циклі все будуємо. Єдиний технічний момент – знаходження точки перетину кола і прямої, яка проходить через фіксовану точку (паралельно радіусу, проведеного в текучу точку). Для цього потрібно сумісно розв’язати їх рівняння. Рівняння прямої y=kx+b, причому b=0, так як точка лежить на осі x, a k=tg t, де t – кут нахилу прямої в радіанах. Рівняння кола (x–r)2  + y2  = r2, так як центр переміщений на величину r відносно початку координат, що проходить через фіксовану точку. Виключаючи y і розв’язуючи рівняння відносно x, отримуємо x=2r / (1 – k2). Підставляючи це значення в рівняння прямої, отримуємо координату  (y) точки на кругу. Знаючи координати двох точок, знайти координати середини з’єднуючого їх відрізка дуже просто. Вони рівні півсумі координат точок. Все це реалізовано в наступній програмі.
program Vitok_8_Skromniy_Seredinki;
uses graph;

var t,k,x,x1,x2,x3,y,y1,y2,y3:double;
DrawWidth,r,f:integer;
d,m:integer;

procedure Init;
begin
r:=200;
DrawWidth:=1;
setlinestyle(0,0,DrawWidth);
setcolor(1);
circle(190+r,250,r);
x3:=2*r;
y3:=0;
f:=1;
end;

procedure show;
begin
repeat
t:=f*Pi/180;
k:=(sin(t)/cos(t));
x:=r*(1+cos(t));
y:=r*sin(t);
x1:=2*r/(1+sqr(k));
y1:=k*x1;
x2:=(x1+x)/2;
y2:=(y1+y)/2;
setcolor(9); circle(round(x1)+190,round(y1)+250,4);
setcolor(11);circle(round( x)+190,round( y)+250,4);
setcolor(13);circle(round(x2)+190,round(y2)+250,4);
setcolor(3); Line(round(x2)+190,round(y2)+250,round(x3)+190,round(y3)+250);
setcolor(5); Line(190,250,round(x1)+190,round(y1)+250);
setcolor(7); Line(r+190,250,round(x)+190,round(y)+250);
x3:=x2;y3:=y2;
inc(f,6);
until f>=360;
end;

begin
d:=DETECT;
initGraph(d,m,'');
Init;
show;
setcolor(14);
outtextxy(400,  5,'Vitok 8: Skromniy-Seredinki');
setcolor(12);
outtextxy( 10,460,'Press <ENTER> for EXIT');
readln;
closegraph;
end.


















Виток четвертий. Павутинний.
Любителям математичних картинок відома так звана павутина. На колі беруться точки з визначеним кроком, і кожна з них з’єднується з такою ж точкою, але зміщеною по фазі в якесь число раз (n) – це число може приймати фіксоване або випадкове значення. Точки перетину хорд зливаються в муаровий узор самих різних задумкуватих форм. Ідея так притягує, що наполегливо пропонується всім попробувати її самостійно, щоб пограти з параметрами і насолодитися ефектами. При n=1 не нарисується нічого, так як початкові і кінцеві точки прямих співпадають, але при збільшені значення змінної n будуть появлятися фігури з вузлами, причому кількість вузлів дорівнює n –1. При n =2 буде відображена кардіоїда, при n = 3 – нефроїда з двома вузлами. Якщо n –1 – дільник числа 360, то картинка проявляє деяку “впорядкованість”. Приведемо ілюстрацію для значень n = 2 (кардіоїда) і для порівняння дві павутини для значень n = 25 і n = 33.

program Vitok_10_Paytinniy;
uses graph;

var t,x,y,x2,y2:real;
n,DrawWidth,r,xx,yy,i,c:integer;
d,m:integer;
st:string;

procedure show(n,xx,yy,r:integer);
var cl:integer;
begin
for i:=1 to 360 do
begin
T:=i*pi/180;
x:=R*cos(t);
y:=r*sin(t);
x2:=R*cos(n*t);
y2:=R*sin(n*t);
setcolor(n);
if n mod 16 = 0 then setcolor(1);
line(round(x)+xx,round(y)+yy,round(x2)+xx,round(y2)+yy);
end;
end;

var a,b,k:integer;
begin
d:=DETECT;
initGraph(d,m,'');
k:=20; {Kilkist Figyr}
for n:=1 to k do
begin
setbkcolor(white);
show(n,320,240,240);str(n,st);
outtextxy(10,5,'N='+st);
setcolor(14);
outtextxy(400,  5,'Vitok 10: Skromniy-Seredinki');
if n<>k then
begin
outtextxy(10,460,'Press <ENTER> for Continue');
readln;
clearviewport;
end;
end;
setcolor(14);
outtextxy(400,  5,'Vitok 10: Skromniy-Seredinki');
outtextxy(10,460,'Press <ENTER> for EXIT');
readln;
closegraph;
end.

Search:
????????...

психодіагностичні дослідження

що таке переносник захворювань

головна тема гобсеку

табличка множення

бесіди з дітьми 3 років про природу

спильне и видминне Левицького и Мирного

Особливості другого етапу позитивізму

твір опис про осінь у науковому стилі

переказ садок вишневий коло хати

мутні виділення матки



?????????? ????????? ????
   
Created by Yura Pagor, 2007-2010