Úprava programu – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Úprava programu – Pascal – Fórum – Programujte.comÚprava programu – Pascal – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Lolo240
Duch
12. 5. 2017   #1
-
0
-

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.
Nahlásit jako SPAM
IP: 88.102.95.–
gna
~ Anonymní uživatel
1182 příspěvků
13. 5. 2017   #2
-
+1
-
Zajímavé

Jsou to bodová svítidla, takže záleží jen na vzdálenosti, na úhlu nezáleží.

Kdybys do toho chtěla nějak zapojit strop, tak potřebuješ vzdálenost svítidel od stropu. A stejně jako pro podlahu spočítáš osvětlení pro strop. Definuješ nějakou světelnou odrazivost toho stropu a vzniknou ti tak další svítidla. Pak bys teda ještě mohla zapojit odraz od stolu a stěn a ... nevymýšlej kraviny.

A už minule ti Milan psal, že při zjišťování minima a maxima stolu porovnáváš hodnoty místnosti.

Nahlásit jako SPAM
IP: 213.211.51.–
Lolo240
Duch
13. 5. 2017   #3
-
0
-

#2 gna
Moc děkuju

Nahlásit jako SPAM
IP: 88.102.95.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 38 hostů

Podobná vlákna

Úprava programu v C — založil Zurfik

Úprava programu — založil Ondřej

Uprava programu — založil Milan

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý