AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Formel gesucht

Ein Thema von Carsten1234 · begonnen am 3. Apr 2009 · letzter Beitrag vom 3. Apr 2009
Antwort Antwort
Carsten1234

Registriert seit: 9. Apr 2008
Ort: Vechelde
178 Beiträge
 
Delphi 8 Professional
 
#1

Formel gesucht

  Alt 3. Apr 2009, 10:35
Hallo zusammen,

irgendwie haperts mal wieder an der Erstellung einer Formel.

Ich habe in meinem Programm einen eingestellten Wertebereich von -30..+70.
Von einem angeschlossenen Gerät bekomme ich ("nur") digitale Werte im Bereich 0..4095.
Es entspricht also übertragenderweise:
0 => -30
4095 => +70
Aus diesem Zusammenhang möchte ich einen aktuellen Wert berechnen und darstellen.
Versucht hatte ich:

Result:= ( (70 - (-30)) / 4095 ) * {gelieferter Wert};

Nur:
Setze ich als gelieferten Wert 2048 an, so ergibt sich nach der Formel da oben folgende Werte

gelieferter Wert => berechneter Wert
------------------------------------
0 => 0
2048 => 50
4095 => 99,97

Das haut irgendwie nicht so ganz hin.

Frage: Wie muss die korrekte Formel lauten, dass bei einem gelieferten Wert von 4095 als berechnetes Ergebnis 70 raus kommt?

Dank vorab und Gruß, Carsten
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Formel gesucht

  Alt 3. Apr 2009, 10:42
Ist es nicht so?


aktuelle Wert = ((gel.Wert * (100/4095)) -30)

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Formel gesucht

  Alt 3. Apr 2009, 10:42
Hi!

(4095 / 40,95) - 30

Sollte funktionieren
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Formel gesucht

  Alt 3. Apr 2009, 10:43
Y = (X - X1) * (Y2 - Y1) / (X2 - X1) + Y1 (allg. Formel: Die Punkte (X1|Y1) und (X2|Y2) dienen als Stützstellen, dazwischen wird interpoliert)

Also:

Result := (Wert - 0) * (70 + 30) / (4095 - 0) - 30

<=>

Result := Wert * 100 / 4095 - 30

Um zu zeigen, wie man drauf kommt
  Mit Zitat antworten Zitat
Carsten1234

Registriert seit: 9. Apr 2008
Ort: Vechelde
178 Beiträge
 
Delphi 8 Professional
 
#5

Re: Formel gesucht

  Alt 3. Apr 2009, 11:44
Zitat von jfheins:
Result := Wert * 100 / 4095 - 30

Um zu zeigen, wie man drauf kommt
Danke (auch an die anderen Poster), Deine Formel funktioniert fast.
Wenn ich jedoch meinen Wertebereich verschiebe auf +10..+110, dann ergibt sich bei einem gelieferten Wert von 0 mit Deiner Formel folgende Berechnung:
Result:= 0 * (110 + 10) / 4095 - 10
==> Result = -10

Es gilt also zumindest darauf zu achten, dass der untere Bereich >= 0 ist, denn wenn er >= 0 ist, dass muss der untere Werte nicht abgezogen, sondern dazu addiert werden. Ferner muss dann der untere Grenzwert vom oberen Grenzwert abgezogen werden.

Gruß, Carsten
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Formel gesucht

  Alt 3. Apr 2009, 11:58
Öhm nein.
Du hast doch den Prozetwert des Wertebereichs (0..4095).
Diesen Prozentwert musst du dann nur noch auf deinen Wertebereich umrechnen.

Heißt:
Delphi-Quellcode:
Prozentwert := Wert * 100 / 4095;
MeinWertInMeinemWertebereich := Prozentwert - 30; // Da (0..100) - 30 = (-30..70) :lol:
bei 10..110 wäre das dann:
Result := Wert * 100 / 4095 + 10
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#7

Re: Formel gesucht

  Alt 3. Apr 2009, 12:04
Zitat von Carsten1234:
Wenn ich jedoch meinen Wertebereich verschiebe auf +10..+110, dann ergibt sich bei einem gelieferten Wert von 0 mit Deiner Formel folgende Berechnung:
Result:= 0 * (110 + 10) / 4095 - 10
==> Result = -10
Du musst schon die Vorzeichen beachten

Zitat von jfheins:
Y = (X - X1) * (Y2 - Y1) / (X2 - X1) + Y1
Vorher war Y1 gleich -30 und Y2 gleich 70 (Y2 - Y1) = (70 - -30) = 100
Und am Ende + Y1 ergibt +(-30) ist gleich - 30

Jetzt: Y1 = 10 und Y2 = 110

(Beide male ist X1 gleich 0 und X2 gleich 4095 (Y ist der "Zielbereich" und X ist der "Quellbereich"))

Also:

Y = (X - 0) * (110 - 10) / (4095 - 0) + 10

Y = X * 100 / 4095 + 10
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz