Dobrý den, pomohli byste mi prosím vylepšit tento program? Ráda bych do výpočtu intenzity zapojila ještě úhel dopadu světla. Jak by byla funkce, která by zmenšovala světelný tok s ohledem na to, že nějaké světlo dopadná na strop? Moc děkuji
program obecny_priklad;
uses crt;
const
ctverec=0.1; //delka strany elementarni plochy v metrech
var
xs,ys,xss,yss,delka,sirka,ry,rx,vx,vy,SvTok,vstul,minOsv,minOsvs,vs,vs2,vstul2 : real; //souradnice svitidla
i,j,c,k,l,m : integer;
Mistnost, Stul: array of array of real; //Deklarace dynamickych poli, deklaruji pole poli realnych cisel
mx, my: integer;
function na2(r : real) : real;
begin
na2:=r*r //funkce vytvoří kvadrát
end;
begin
writeln;
textbackground(white);
textcolor(red);
writeln('----------------------------------------------------------------------------');
writeln('----------------------------------------------------------------------------'); //zadni ulohy
writeln('Program pocita hodnotu maximalniho, minimalniho osvetleni a procentualni ');
writeln('podil nedosvetlenych ploch mistnosti o urcitych rozmerech, ktera je ');
writeln('osvetlena nekolika usporadanymi svitidly v radach. K vypoctu je nutne zadat ');
writeln('roztec mezi svitidly, vzdalenost mezi jednotlivymi radami, vzdalenost ');
writeln('svitidla od zeme, vzdalenosti krajniho svitidla od obou sten, svetelny tok ');
writeln('zarovky a minimalni pripustne osvetleni teto mistnosti. ');
writeln('----------------------------------------------------------------------------');
writeln('----------------------------------------------------------------------------');
writeln;
writeln('----------------------------------------------------------------------------'); //zadni ulohy rozsirujici ulohy
writeln('Rozsireni ulohy - vypocet intenzity osvetleni na stole o zadane vysce. ');
writeln('----------------------------------------------------------------------------');
textbackground(black);
writeln;
writeln;
textcolor(green);
textbackground(white);
writeln('Zadejte:');
writeln;
textcolor(white);
textbackground(black);
write('Delku mistnosti v metrech y: ');
read(delka);
writeln;
write('Sirku mistnosti v metrech x: ');
read(sirka);
writeln;
write('Roztec mezi svitidly v metrech - ve smeru delky y: ');
read(rx);
if rx >= delka then begin
textbackground(red);
writeln('Prilis velka roztec mezi svetly!!');
end
else
begin
writeln;
write('Vzdalenost mezi jednotlivymi radami v metrech - ve smeru delky x: ');
read(ry);
if ry >= sirka then begin
textbackground(red);
writeln('Prilis velka vzdalenost mezi jednotlivymi radami!!');
end
else
begin
writeln;
write('Vzdalenost 1. svitidla od steny ve smeru osy x v metrech: ');
read(vx);
if vx >= sirka then begin
textbackground(red);
writeln('Prilis velka vzdalenost od steny!!');
end
else
begin
writeln;
write('Vzdalenost 1. svitidla od steny ve smeru osy y v metrech: ');
read(vy);
if vy >= delka then begin
textbackground(red);
writeln('Prilis velka vzdalenost od steny!!');
end
else
begin
writeln;
write('Vzdalenost svetel od zeme v metrech: ');
read(vs);
writeln;
write('Minimalni svetelny tok zarovky v lumenech (lm): ');
read(SvTok);
writeln;
write('Minimalni pripustne osvetleni mistnosti v luxech: ');
read(minOsv);
writeln;
write('Vyska stolu v metrech: ');
readln(vstul);
if vstul >= vs then begin
textbackground(red);
writeln('Stul je prilis vysoky!!');
end
else
begin
writeln;
write('Minimalni pripustne osvetleni na stole v luxech: ');
readln(minOsvs);
writeln;
vs2:=vs*vs; //kvadrat vzdalenosti svetla od zeme
vstul2:=(vs-vstul)*(vs-vstul); //kvadtat vzdalenosti stolu od zeme
mx := round(delka/ctverec-1); //vypocet delek pro jednotlive rozmery pole
my := round(sirka/ctverec-1);
SetLength(Mistnost, mx + 1, my + 1); //Nastavi delku - jako pro deklaraci pole, bere delku pole ne 0 .. mx
SetLength(Stul, mx + 1, my + 1);
end;
end;
end;
end;
end;
ys:=vy; //souradnici svitidla se priradi vzdalenost 1. svitidla od steny ve smeru osy y
repeat //zacatek cyklu
xs:=vx; //souradnici svitidla se priradi vzdalenost 1. svitidla od steny ve smeru osy x
repeat //zacatek vnoreneho
for i:=0 to mx do //pruchod radky matice
for j:=0 to my do //pruchod slouci matice
Mistnost[i,j]:=Mistnost[i,j]+SvTok/(vs2+na2(xs-i*Ctverec-Ctverec/2)+na2(ys-j*Ctverec-Ctverec/2)); //vynulovane matice reprezentující mistnost - se plni elementy E_(i,j) dle vzorce (3)
xs:=xs+Rx; //k x-ove souradnici svitidla se pricte rozptyl mezi svitidly
until xs>=Delka; //vnoreny cyklus probiha dokud je x-ova souradnice nedosahne delky mistnosti
ys:=ys+Ry; //k y-ove souradnici svitidla se pricte rozptyl mezi svitidly
until ys>=Sirka; //cyklus probiha dokud y-ova souradnice nedosahne sirky mistnosti
c:=0; //vynulovani c (elementární plocha)
xs:=0;
ys:=2000;
for i:=0 to mx do //pruchod radky matice
for j:=0 to my do begin //pruchod slouci matice
if Mistnost[i,j] > xs then xs:=Mistnost[i,j]; //porovnani hodnoty pole na i,j-tem miste se souradnicemi svitidla
if Mistnost[i,j] < ys then ys:=Mistnost[i,j];
if Mistnost[i,j] < MinOsv then Inc(c); //pokud je hodnota na i,j-te pozici mensi nez minimalni osvetleni, pricte se k c jednicka
end;
yss:=vy;
repeat
xss:=vx;
repeat
for k:=0 to mx do
for l:=0 to my do
Stul[k,l]:=Stul[k,l]+SvTok/(Vstul2+na2(xss-k*Ctverec-Ctverec/2)+na2(yss-l*Ctverec-Ctverec/2));
xss:=xss+Rx;
until xss>=Delka;
yss:=yss+Ry;
until yss>=Sirka;
m:=0;
xss:=0;
yss:=2000;
for k:=0 to mx do
for l:=0 to my do begin
if Mistnost[k,l] > xss then xss:=Stul[k,l];
if Mistnost[k,l] < yss then yss:=Stul[k,l];
if Mistnost[k,l] < MinOsvs then Inc(m);
end;
writeln;
textcolor(yellow);
writeln('________________________________________________________________________________');
writeln('VYSLEDKY VYSLEDKY - osvetleni na stole');
writeln('________________________________________________________________________________');
writeln; //vypsani vysledku
writeln('Nejvetsi osvetleni: ',xs:12:3,' lx',xss:19:3,' lx');
writeln('Nejmensi osvetleni: ',ys:12:3,' lx',yss:19:3,' lx');
writeln('Nedosvetleno: ',100*c/((mx+1)*(my+1)):12:3,' %',100*m/((mx+1)*(my+1)):20:3,' %'); //c pocet nedosvetlenych elementu
writeln('________________________________________________________________________________');
readln;
end.