Beregning af skyggekast fra vindmøller
");
d=null;
arr=null;
win.status="Tegner plot..."
win.document.close();
win.focus();
run(1);
var tid,hlp="";
date=new Date();
tid=Math.round(0.001*(date.getTime()-time));
if (tid!=0) hlp="Maskintidsforbrug "+tid+" sekunder. ";
var msg=hlp+"Maximum "+((0.001*Math.round(max*1000)).toString()).substring(0,5+Math.log(max)/Math.log(10))+" minutters skygge (roedt areal)";
win.status=msg;
self.status=msg;
self.defaultStatus=msg;
win=null;
}
function cell(r,c,color,m,res,z,f,a) {
r*=res;
var s="",mo="";
if (m) mo=" onMouseOver='a("+z+");return true'";
if (c>1) s=" COLSPAN='"+c+"'";
win.document.write("
"+a);
}
function img(a,ras,height,m,xOrg,yOrg,cellsX,cellsY,max,heighto,diametero2,worst,pct,dist,faceR,d,rose){
var xA=a[0];
var yA=a[1];
var zA=a[2];
var gA=a[3];
var t,xo,yo,tmp,ic,oldxo,ssxo,sxo,oldyo,found;
for (var j=0;j=0 && xo=0 && yomax) max=tmp;
oldxo=xo;
// step right
while (++xomax) max=tmp;
}
xo=oldxo;
// step left
while (--xo>=0) {
ic= inCircle(xo-xOrg,yo-yOrg,0,heighto,diametero2,xA[j],yA[j],zA[j],worst,pct,gA[j],dist,faceR,rose);
if (ic==0) break;
tmp=d[yo*cellsX+xo]+=ic;
if (tmp>max) max=tmp;
}
xo=oldxo;
ssxo=xo;
sxo=xo;
oldyo=yo;
// step up
while (++yomax) max=tmp;
found=true;
xo++;
}
sxo=xo;
xo=oldxo;
// step left
while (--xo>=0) {
ic= inCircle(xo-xOrg,yo-yOrg,0,heighto,diametero2,xA[j],yA[j],zA[j],worst,pct,gA[j],dist,faceR,rose);
if (ic==0) break;
tmp=d[yo*cellsX+xo]+=ic;
if (tmp>max) max=tmp;
found=true;
}
oldxo=Math.round(0.5*(sxo+xo));
xo=oldxo;
if (found==false) break;
}
yo=oldyo;
xo=ssxo;
oldxo=ssxo;
// step down
while (--yo>=0) {
found=false;
// step right
while (xomax) max=tmp;
found=true;
xo++;
}
sxo=xo;
xo=oldxo;
// step left
while (--xo>=0) {
ic= inCircle(xo-xOrg,yo-yOrg,0,heighto,diametero2,xA[j],yA[j],zA[j],worst,pct,gA[j],dist,faceR,rose);
if (ic==0) break;
tmp=d[yo*cellsX+xo]+=ic;
if (tmp>max) max=tmp;
found=true;
}
oldxo=Math.round(0.5*(sxo+xo));
xo=oldxo;
if (found==false) break;
}
yo=oldyo;
}
}
}
return(max)
}
function greys(n) {
var str="0123456789ABCDEF";
var s=str.charAt(Math.floor(n/16))+str.charAt(n%16);
if (s=="00") return("FF0000");
if (s=="FF") return("006600");
return(s+s+s);
}
function inCircle(xo,yo,zo,height,diameter2,x,y,z,worst,pct,g,dist,faceR,rose) {
var alfa=(xo/x+yo*y/(x*x))/(1+(y*y)/(x*x));
if (alfa<0) return(0);
// var beta=(yo-alfa*y)/x;
// dissolved after alfa (orthogonal to rotor plane) and beta (othogonal to alpha, parallel to rotor plane)
var rX=xo-alfa*x;
var rY=yo-alfa*y;
var rZ=-alfa*z;
var dr=height-rZ;
var dr2=dr*dr;
var p=rX*rX+rY*rY;
if (p+dr2>diameter2||(xo*xo)+(yo*yo)>dist) return(0);
if (worst==1)return(1);
if (worst==0)return(pct*acos(Math.sqrt(p/(diameter2-dr2)))/90);
if (worst==2){
if (Math.sqrt(p/(diameter2-dr2))>Math.abs(cos(faceR-g))) return(0);
return(1);
}
var res=0;
var hlp=Math.sqrt(p/(diameter2-dr2));
for (var i=1;iSkyggetegning ("+worst+") for vindmølle med rotordiameter "+diameter+" m og navhøjde "+height+" m for ";
if (ijFm.per[0].checked) res+= "et minut kl. "+ijFm.hours.value+":"+ijFm.minutes.value+" ";
if (ijFm.per[1].checked) res+="en time fra "+ijFm.hours.value+":00 ";
if (ijFm.per[0].checked || ijFm.per[1].checked){
if (ijFm.daylight.checked) {
res+="sommertid "
}
res+="den "
}
if (ijFm.per[2].checked || ijFm.per[0].checked || ijFm.per[1].checked) res+=ijFm.date.value+". ";
if (ijFm.per[3].checked || ijFm.per[2].checked || ijFm.per[0].checked || ijFm.per[1].checked) {
var n=parseInt(ijFm.month.value);
var m= new Array("januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december");
res=res+m[n-1];
}
if (ijFm.per[4].checked) res=res+"hele året";
res+=" på "+ ijFm.latitude.value+"° ";
res+=ijFm.latitudeM.value+"' ";
if (ijFm.ns[0].checked) res=res+"nordlig "
if (ijFm.ns[1].checked) res=res+"sydlig "
var ndx=ijFm.city.selectedIndex;
res+="bredde";
if (ndx!=ijFm.city.options.length-1)res+=" ("+ ijFm.city.options[ndx].text+")";
var dist=parseFloat(ijFm.dist.value);
var r=parseInt(ijFm.res.options[ijFm.res.selectedIndex].value);
var md=parseFloat(ijFm.m.value);
var x=r*Math.floor(parseInt(ijFm.ww.value)/r)*0.5;
var y=r*Math.floor(parseInt(ijFm.wh.value)/r)*0.5;
if ((r*dist/md)*(r*dist/md)<=x*x+y*y)res+=" på afstande op til "+dist+" m";
res+="Copyright © 1998 Vindmølleindustrien. Reproduktion eller kommerciel brug er ulovlig. "
return(res);
}
function sin(v) { return(Math.sin(0.017453293*v))}
function cos(v) { return(Math.cos(0.017453293*v))}
function tan(v) { return(Math.tan(0.017453293*v))}
function asin(o){return((Math.asin(o))/ 0.017453293)}
function acos(o){return((Math.acos(o))/ 0.017453293)}
function Clatitude(){
var latitude= parseInt(ijFm.latitude.value);
if (latitude<0 || latitude>90||isNaN(latitude)) {
ijFm.latitude.value=0;
latitude=0;
alert("Breddegraden skal være mellem 0 og 90.");
}
if (latitude==90) ijFm.latitudeM.value=0;
ijFm.city.selectedIndex= ijFm.city.options.length-1;
run(1);
Csolar();
}
function Clongitude(){
var longitude= parseInt(ijFm.longitude.value);
if (longitude<0 || longitude>180||isNaN(longitude)) {
ijFm.longitude.value=0;
longitude=0;
alert("Længdegraden skal væ;re mellem 0 og 180.");
}
if (longitude==180) ijFm.longitudeM.value=0;
ijFm.city.selectedIndex= ijFm.city.options.length-1;
run(1);}
function ClatitudeM(){
var latitudeM= parseInt(ijFm.latitudeM.value);
if (latitudeM<0 || latitudeM>59||isNaN(latitudeM)) {
ijFm.latitudeM.value=0;
latitudeM=0;
alert("Minutters bredde skal være mellem 0 og 59.");
}
if (parseInt(ijFm.latitude.value)==90) ijFm.latitudeM.value=0;
ijFm.city.selectedIndex= ijFm.city.options.length-1;
run(1);
Csolar();
}
function ClongitudeM(){
var longitudeM= parseInt(ijFm.longitudeM.value);
if (longitudeM<0 || longitudeM>59||isNaN(longitudeM)) {
ijFm.longitudeM.value=0;
alert("Minutters længde skal være mellem 0 og 59.");
}
if (parseInt(ijFm.longitude.value)==180) ijFm.longitudeM.value=0;
ijFm.city.selectedIndex= ijFm.city.options.length-1;
run(1);}
function CstdMeridian(){
var stdMeridian= parseFloat(ijFm.stdMeridian.value);
if (stdMeridian <0 || stdMeridian >180||isNaN(stdMeridian)) {
ijFm.stdMeridian.value =0;
stdMeridian= parseFloat(ijFm.stdMeridian.value);
ijFm.zone.selectedIndex=0;
ijFm.half.selectedIndex=0;
alert("Standardtidsmedianen skal være mellem 0 og 180 grader.");
}
if ((stdMeridian*2)%15!=0) {
ijFm.stdMeridian.value=0;
ijFm.zone.selectedIndex=0;
ijFm.half.selectedIndex=0;
alert("Standardtidsmedianen skal være et multiplum af 7,5 grader");
}
ijFm.zone.selectedIndex=Math.floor(stdMeridian/15);
ijFm.half.selectedIndex=(2*stdMeridian/15)%2;
run(1);}
function Cdate(){
var date=parseInt(ijFm.date.value);
var month=parseInt(ijFm.month.value);
if (date<1||date>months[month]|| isNaN(date)) {
ijFm.date.value=months[month];
alert("Datoen skal være mellem 1 og "+months[month]+".");
}
run(1);}
function Cmonth(){
var month=parseInt(ijFm.month.value);
if (month<1 || month>12 ||isNaN(month)) {
ijFm.month.value=12;
alert("Måned skal være mellem 1 og 12.");
}
Cdate();}
function Cminutes(){
var now=new Date();
var minutes= parseInt(ijFm.minutes.value);
if (minutes<0 || minutes>59 ||isNaN(minutes)) {
ijFm.minutes.value =1+parseInt(now.getMinutes());
alert("Minutter skal være mellem 0 og 59.");
}
run(1)}
function Chours(){
var hours= parseInt(ijFm.hours.value);
if (hours<0 || hours>23 ||isNaN(hours)) {
var now=new Date();
ijFm.hours.value =1+parseInt(now.getHours());
alert("Timer skal være mellem 0 og 23.");
}
run(1)}
function Cdaylight(){run(1)}
function Cradio(){
ijFm.city.selectedIndex= ijFm.city.options.length-1;
run(1);
Csolar();
}
function Cb(){alert("Beklager, du kan ikke ændre et resultat. Du er nødt til at ændre inputdata i stedet.");
run(1);
}
function Cpm(){
var n=ijFm.pm.selectedIndex;
if (n==0) {ijFm.ewt[0].checked=true;
ijFm.ewt[1].checked=false;}
else {ijFm.ewt[0].checked=false;
ijFm.ewt[1].checked=true;}
run(1);}
function Czeast(){ijFm.pm.selectedIndex=0;run(1)}
function Czwest(){ijFm.pm.selectedIndex=1;run(1)}
function Cwh(){
var wh=parseInt(ijFm.wh.value);
if (wh<100||isNaN(wh)){
alert("Plotterarealet skal være mindst 100 pixels højt.");
ijFm.wh.value=100;
}
}
function Cww(){
var ww=parseInt(ijFm.ww.value);
if (ww<100||isNaN(ww)){
alert("Plotterarealet skal være mindt 100 pixels bredt.");
ijFm.ww.value=100;
}
}
function Cm(){
m=parseInt(ijFm.m.value);
if (m<1){
alert("Plotteropløsningen skal være mindst 1 m");
ijFm.m.value=1;
}
if (m>100){
alert("Plotteropløsningen kan højst være 100 m");
ijFm.m.value=100;
}
}
function Czone(){
ijFm.stdMeridian.value= 15*parseInt(ijFm.zone.selectedIndex)+ 15*parseInt(ijFm.half.selectedIndex)*0.5;
Cpm();
}
function Chalf(){Czone();}
function Cheight() {
var height=parseFloat(ijFm.height.value);
var diameter=parseFloat(ijFm.diameter.value);
if (height<0.5*diameter||isNaN(height)) {
alert("Du kan ikke have en tårnhøjde, som er mindre end halvdelen af rotordiameteren, medmindre du graver et hul til rotoren. Prøv igen.");
ijFm.height.value=0.5*diameter;
}
run(1);
}
function Cdiameter(){
var height=parseFloat(ijFm.height.value);
var diameter=parseFloat(ijFm.diameter.value);
if (height<0.5*diameter||isNaN(diameter)) {
alert("Du kan ikke have en tårnhøjde, som er mindre end halvdelen af rotordiameteren, medmindre du graver et hul til rotoren. Prøv igen.");
ijFm.diameter.value=02*height;
}
run(1);
}
function Cpct(){
var pct=parseFloat(ijFm.pct.value);
if (pct<1||isNaN(pct)) {
alert("Beklager, rotoren skal køre mindst 1 pct. af tiden");
ijFm.pct.value=1;
}
if (pct>100){
alert("Beklager, rotoren kan ikke køre mere end 100 pct. af tiden.");
ijFm.pct.value=100;
}
}
function Csun(){
var sun=parseFloat(ijFm.sun.value);
if (sun<1||isNaN(sun)) {
alert("Beklager, solen skal være synlig i mindst 1 pct. af dagtimerne.");
ijFm.sun.value=1;
}
if (sun>100){
alert("Beklager, solen kan ikke være synlig mere end 100 pct. af dagtimerne.");
ijFm.sun.value=100;
}
}
function CfaceR() {
ijFm.dir[2].click();
var faceR=parseFloat(ijFm.faceR.value);
if (faceR>90||faceR<-90||isNaN(faceR)){
alert("Beklager, rotoren skal have fronten placeret med en vinkel på mellem 90 og -90 grader..");
ijFm.faceR.value=0;
}
faceR=parseFloat(ijFm.faceR.value);
var other=true;
for (var i=ijFm.faceM.options.length-2;i>=0;i--){
if (faceR==ijFm.faceM.options[i].value) {
ijFm.faceM.selectedIndex=i;
other=false;
}
}
if (other) ijFm.faceM.selectedIndex= ijFm.faceM.options.length-1;
}
function CfaceM(){
ijFm.dir[2].click();
var n=ijFm.faceM.selectedIndex;
if (n!=ijFm.faceM.options.length-1) {
ijFm.faceR.value =parseFloat(ijFm.faceM.options[n].value);
}
}
function Cdist(){
var dist=ijFm.dist.value;
if (dist>5000||dist<100||isNaN(dist)){
alert("Beklager, maksimumsafstanden for skyggeberegning skal ligge mellem 100 og 5000 m.");
ijFm.dist.value=1000;
}
}
function Ccompass(){
var a8=new Array("N-S.......0/180","SE-NW...315/135","E-W......270/90","NE-SW....225/45","bruges ikke","bruges ikke","bruges ikke","bruges ikke");
var a12=new Array("N-S.......0/180","SSE-NNW.330/150","ESE-WNW.300/120","E-W......270/90","ENE-WSW..240/60","NNE-SSW..210/30","bruges ikke","bruges ikke");
var a16=new Array("N-S.......0-180","SSE-NNW.338/158","SE-NW...315/135","ESE-WNW.247/113","E-W......270/90","ENE-WSW..292/68","NE-SW....315/45","NNE-SSW..337/23");
var dc=new Array(a8,a12,a16);
var n=parseInt(ijFm.compass.selectedIndex);
for (var i=0;i<8;i++){
ijFm.elements["d"+(i+1)].value=dc[n][i];
}
var d=parseInt(ijFm.compass.options[ijFm.compass.selectedIndex].value);
var sum=0;
for (var i=1;i<=d;i++){
sum+=parseFloat(ijFm.elements["b"+i].value);
}
ijFm.b9.value=sum;
}
function Cno(){
alert("Beklager, du kan ikke ændre et resultat.");
Ccompass();
}
function Cbs(n){
var d=parseInt(ijFm.compass.options[ijFm.compass.selectedIndex].value);
n=parseInt(n);
if (n>d){
alert("Beklager, det felt bruges ikke. Du skal kun specificere "+d+" forskellige retninger, da det jo virker på samme måde, når rotoren er drejet 180 grader.");
ijFm.elements["b"+n].value="bruges ikke";
}
else{
var v=parseFloat(ijFm.elements["b"+n].value);
if (v<0||v>100||isNaN(v)){
alert("Beklager, den procentdel af tiden, som rotoren er i denne retning i vindrosetabellen ("+((n-1)*180/d)+" grader) skal være mellem 0 og 100 procent af tiden.");
ijFm.elements["b"+n].value=0;
}
}
var sum=0;
for (var i=1;i<=d;i++){
sum+=parseFloat(ijFm.elements["b"+i].value);
}
ijFm.b9.value=sum;
}
// (c) Copyright 1998 Vindm¿lleindustrien