Also quasi die "Zwischenbereiche" zwischen zwei Angaben/Punkten sollen schon linear sein.
Beispiel aus meinem hs:
Rollo.png
Beispiel aus meinem hs:
Rollo.png
function getZwischenwert($elevation1,$winkel1,$elevation2,$winkel2,$aktuelleElev){
return ($winkel2-$winkel1)/($elevation2-$elevation1)*$aktuelleElev+($elevation2*$winkel1-$elevation1*$winkel2)/($elevation2-$elevation1);
}
###[DEF]### [name =Interpolation Lamellenwinkel ] [titel =Lamellenwinkel berechnen ] [e#1 TRIGGER=Sonnenhoehe_aktuell ] [e#10 =Intervallgrenze_1 #init=5 ] [e#11 =Lamellenwinkel_1 #init=10 ] [e#20 =Intervallgrenze_2 #init=24 ] [e#21 =Lamellenwinkel_2 #init=50 ] [e#30 =Intervallgrenze_3 #init=45 ] [e#31 =Lamellenwinkel_3 #init=30 ] [e#40 =Intervallgrenze_4 #init=65 ] [e#41 =Lamellenwinkel_4 #init=10 ] [a#1 =Lamellenwinkel ] ###[/DEF]### ###[HELP]### Dieser Baustein interpoliert auf linearen Teilstrecken den einzustellenden Lamellenwinkel. Eingänge EX0 definieren die Referenzhöhen und Eingänge EX1 die zugehörigen Winkel. Ausgang A1 gibt den interpolierten Lamellenwinkel als Ganzzahl gerundet zurück. ###[/HELP]### ###[LBS]### <? function LB_LBSID($id) { if ($E=logic_getInputs($id)) { if ($E[1]['refresh']==1) { if ($E[1]['value']<=$E[10]['value']) { logic_setOutput($id,1,$E[11]['value']); } elseif ($E[1]['value']<=$E[20]['value'] && $E[1]['value']>$E[10]['value']) { logic_setOutput($id,1,round((($E[21]['value']-$E[11]['value'])/($E[20]['value']-$E[10]['value']))*($E[1]['value']-$E[10]['value'])+$E[11]['value']),0); } elseif ($E[1]['value']<=$E[30]['value'] && $E[1]['value']>$E[20]['value']) { logic_setOutput($id,1,round((($E[31]['value']-$E[21]['value'])/($E[30]['value']-$E[20]['value']))*($E[1]['value']-$E[20]['value'])+$E[21]['value']),0); } elseif ($E[1]['value']<=$E[40]['value'] && $E[1]['value']>$E[30]['value']) { logic_setOutput($id,1,(($E[41]['value']-$E[31]['value'])/($E[40]['value']-$E[30]['value']))*($E[1]['value']-$E[30]['value'])+$E[31]['value']); } elseif ($E[1]['value']>$E[40]['value']) { logic_setOutput($id,1,$E[41]['value']); } } } } ?> ###[/LBS]### ###[EXEC]### <? ?> ###[/EXEC]###
} elseif ($E[1]['value']<=$E[40]['value'] && $E[1]['value']>$E[30]['value']) { logic_setOutput($id,1,(($E[41]['value']-$E[31]['value'])/($E[40]['value']-$E[30]['value']))*($E[1]['value']-$E[30]['value'])+$E[31]['value']);
} elseif ($E[1]['value']<=$E[40]['value'] && $E[1]['value']>$E[30]['value']) { logic_setOutput($id,1,[B]round([/B](($E[41]['value']-$E[31]['value'])/($E[40]['value']-$E[30]['value']))*($E[1]['value']-$E[30]['value'])+$E[31]['value'])[B],0)[/B];
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar