Ik gebruik een 3th-party applicatie om cartografische berekeningen mee te doen (Surfer 8 ).
Deze applicatie kan maar twee variabelen aan.
Dus:
Ik kan functies gebruiken als C=23*A+78 en C=23*A+45*B-67
waar C de nieuwe kaart is en A en B bestaande kaarten zijn.
Nu komt het bij ons regelmatig voor dat we meer dan 2 variabelen willen gebruiken, dus dat we functies nodig hebben als:
C=23*A+45*B-67*D+89 of zelfs C=23*A+45*B-67*D+89*E-123
Surfer is prima te programmeren via VB6 en dit probleem los ik als volgt op.
Ik gebruik de volgende functie:
C=23*A+45*B-67*D+89
Ik lees de data van de kaarten A, B en D in geheugen in.
Bepaal per coordinatenpaar de waarde van elk punt in elke kaart.
Vervang in de functie de letters A, B of D met de waarde uit de bijbehorende kaart en gebruik Evaluate() om die uitkomst te berekenen.
Dus
Functie is C=23*A+45*B-67*D+89
De waarde van kaart A op punt x,y is 15.6,
van B is 18.9
en van D is 28.25
Na een Replace ziet de functie er als volgt uit:
23*15.6+45*18.9-67*D+28.25
Deze string stop ik in Evaluate()
Uitkomst = CDbl(Evaluate(sFunctie))
en ik heb de uitkomst.
Dit werkt prima alleen is heel erg traag.
Het langste duurt de Evaluate functie.
Normaal duurt een kaart berekenen ca. 40 sec (afhankelijk hoe groot, etc) en nu duurt het 2 min 20.
Mijn vraag is dan ook.
Weet iemand een andere en snellere manier om een string te berekenen?
Deze applicatie kan maar twee variabelen aan.
Dus:
Ik kan functies gebruiken als C=23*A+78 en C=23*A+45*B-67
waar C de nieuwe kaart is en A en B bestaande kaarten zijn.
Nu komt het bij ons regelmatig voor dat we meer dan 2 variabelen willen gebruiken, dus dat we functies nodig hebben als:
C=23*A+45*B-67*D+89 of zelfs C=23*A+45*B-67*D+89*E-123
Surfer is prima te programmeren via VB6 en dit probleem los ik als volgt op.
Ik gebruik de volgende functie:
C=23*A+45*B-67*D+89
Ik lees de data van de kaarten A, B en D in geheugen in.
Bepaal per coordinatenpaar de waarde van elk punt in elke kaart.
Vervang in de functie de letters A, B of D met de waarde uit de bijbehorende kaart en gebruik Evaluate() om die uitkomst te berekenen.
Dus
Functie is C=23*A+45*B-67*D+89
De waarde van kaart A op punt x,y is 15.6,
van B is 18.9
en van D is 28.25
Na een Replace ziet de functie er als volgt uit:
23*15.6+45*18.9-67*D+28.25
Deze string stop ik in Evaluate()
Uitkomst = CDbl(Evaluate(sFunctie))
en ik heb de uitkomst.
Dit werkt prima alleen is heel erg traag.
Het langste duurt de Evaluate functie.
Normaal duurt een kaart berekenen ca. 40 sec (afhankelijk hoe groot, etc) en nu duurt het 2 min 20.
Mijn vraag is dan ook.
Weet iemand een andere en snellere manier om een string te berekenen?