Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
stepaschka55
Anmeldungsdatum: 11.06.2013 Beiträge: 9
|
Verfasst am: 11.06.2013, 20:59 Titel: Temperaturskala in QBasic |
|
|
Hallo,
ich bin neu hier im Forum. Ich habe mich extra registriert, weil ich hoffe, dass ihr mir helfen könnt. Erstmal erkläre was ich für eine Aufgabe hatte. Es werden immer Daten erfasst und eingelesen. ( Volt / Spannung ) Diese musste ich statt Volt in Temperatur( °C) anzeigen lasen. So weit so gut. in QBasic ist das ja so das oben links der Punkt ( 0,0) und rechts unten ( 320/200) ( SCREEN 13) ist. Also wenn die Temperatur ansteigt, sinkt sie in der Grafik nach unten. Ich komme nicht drauf wie ich also die Skalierung so machen kann, dass die Temperatur nicht bei ( 0,0) anfängt und nach unten geht sondern von unten nach oben ( Normalfall) steigt. Dazu muss ich sagen, dass ich das erste mal überhaupt programmiere. I-wie begeistert mich das und ich will unbedingt eine Lösung dafür finden. Ich hoffe ich könnt mir einen Stupser in die richtige Richtung geben.
Vielen Dank schonmal für die Hilfe. |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4637 Wohnort: ~/
|
Verfasst am: 11.06.2013, 21:22 Titel: |
|
|
Man kann da natürlich die Koordinaten immer selbst umrechnen (das würde ich in diesem Fall machen); oder du stellst die Koordinaten mittels WINDOW um.
http://www.freebasic-portal.de/befehlsreferenz/window-136.html _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
stepaschka55
Anmeldungsdatum: 11.06.2013 Beiträge: 9
|
Verfasst am: 11.06.2013, 21:49 Titel: |
|
|
wie kann man den die Koordinaten selbst umrechnen ? |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2514 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 11.06.2013, 22:11 Titel: |
|
|
Koordinatenumrechnung: Ist in Deinem Fall normalerweise eine einfache lineare Transformation, d.h.
Code: | xPix = xReal * a + b
yPix = yReal * c + d |
=> Jetzt musst Du nur noch a, b, c und d bestimmen, wofür sich zwei einfache lineares Gleichungssysteme eigen (x und y können hier vollkommen separat betrachtet werden): Du definierst zwei Punkte über die Diagonale, wo Du einen bestimmten Pixelwert einen bestimmten Temperaturwert bzw. sonstige Grösse zuweist. => Diese Werte dann als gegebene Zahlen bei xReal, xPix, yReal und yPix einsetzen -> entstandene Gleichungssysteme nach a und b bzw. c und d auflösen.
Umsetzung in QB: Mit Vorteil a, b, c und d als SHARED-Variablen speichern -> zwei FUNCTIONs der Art xReal2xPix() und yReal2yPix() und LINE, PSET einkapseln. Sieht dann grob so aus:
Code: | DIM SHARED a!, b!, c!, d!
' a, b, c und d als Initialisierung berechnen
FUNCTION xReal2xPix(xr!)
xReal2xPix! = xr! * a! + b!
END FUNCTION
FUNCTION yReal2yPix(yr!)
yReal2yPix! = yr! * c! + d!
END FUNCTION
SUB LineInRealKoord(x1!, y1!, x2!, y2!, farbe%)
LINE (xReal2xPix!(x1!), yReal2yPix!(y1!))-(xReal2xPix!(x2!), yReal2yPix!(y2!)), farbe%
END SUB
SUB PsetInRealKoord(x!, y!, farbe%)
PSET (xReal2xPix!(x!), yReal2yPix!(y!)), farbe%
END SUB |
Übrigens typische nichtlineare Koordinaten sind beispielsweise Längen- und Breitengrad auf ein Bildschirmabbild übertragen, dort wird es dann entsprechend komplexer. _________________ Teste die PC-Sicherheit mit www.sec-check.net
Zuletzt bearbeitet von dreael am 11.06.2013, 22:12, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4637 Wohnort: ~/
|
Verfasst am: 11.06.2013, 22:12 Titel: |
|
|
Dein Fenster ist 200 Pixel hoch; wenn du einen Wert von y Pixel zeichnen willst, zeichnest du ihn eben nicht nach (x, y) sondern nach (x, 200-y). _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
stepaschka55
Anmeldungsdatum: 11.06.2013 Beiträge: 9
|
Verfasst am: 11.06.2013, 22:18 Titel: |
|
|
erstmal vielen Dank an euch. Bin gerade bissl verwirrt womit ich genau anfangen soll. |
|
Nach oben |
|
|
stepaschka55
Anmeldungsdatum: 11.06.2013 Beiträge: 9
|
Verfasst am: 11.06.2013, 22:37 Titel: |
|
|
so wie es jetzt aussieht funktioniert das bei mir. ob das so richtig ist, sehe ich wenn ich verschiedene Spannungen dran anschließe. Ich habe noch paar Fragen und wäre für eure Hilfe dankbar. Oder muss ich extra neuen Thread dafür aufmachen?
1. wie kann man die Grafik größer machen? Mein Problem ist folgendes. Die Temperaturerfassung ist auf einer Grafik ca. 5 cm x 4cm . Ich möchte die größer haben damit die verschiedene °C Skalierungen weiter auseinander liegen.
2. Kann man i-wie die Schrift kleiner machen? Ich muss die Temperatur im Temperaturtrend beschriften. Oder gibt es da bessere Möglichkeiten.
Danke. |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4637 Wohnort: ~/
|
Verfasst am: 11.06.2013, 23:01 Titel: |
|
|
Um die Werte doppelt so hoch einzuzeichnen, zeichnest du sie nicht nach (x, 200-y), sondern nach (x, 200-2*y). Wenn du es auch doppelt so breit willst, dann eben (2*x, 200-2*y). Halt einfach ein bisschen Mathematik.
Ist weiß jetzt nicht, welche Schriftgröße unter QBasic standardmäßig vorgegeben ist; umstellen kannst du mit WIDTH:
http://www.freebasic-portal.de/befehlsreferenz/width-anweisung-138.html
Orientiere dich aber an der Hilfe zu SCREEN, welche Werte überhaupt möglich sind. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
stepaschka55
Anmeldungsdatum: 11.06.2013 Beiträge: 9
|
Verfasst am: 11.06.2013, 23:10 Titel: |
|
|
super, habe jetzt einen größeren abstand. Aber wenn ich kann aber nicht den ganzen Bereich von 0 bis 30 °C abdecken weil es so aussieht also ob es über den Rand geht. Ich meine ob man auch das Grafikfeld im ganzen Screen vergrößern kann und es nicht wie bei mir nur oben rechts sich befindet |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4637 Wohnort: ~/
|
Verfasst am: 12.06.2013, 00:06 Titel: |
|
|
Ich weiß nicht genau, was du willst - willst du das Feld verschieben?
(x*2 + 50, 180 - y*2) (z. B.) - dann haben wir schon ziemlich das, was dreael vorhin gepostet hat. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
stepaschka55
Anmeldungsdatum: 11.06.2013 Beiträge: 9
|
Verfasst am: 12.06.2013, 08:18 Titel: |
|
|
super. das funktioniert schon. vielen Dank.
2 Sachen noch
ich kriege jetzt immer punkte auf meinem Temperaturtrend ausgelesen was so auch richtig ist. Jetzt muss ich die auch zuordnen welche Temperatur das ist.
Ich habe jetzt 2 Linien ( einmal x-achse und einmal y-achse ) gezeichnet. Ich kann natürlich alle 3°C beschriften aber die Buchstaben sind zu Groß für die Nummerierung. Wenn ich die Linien so zeichnen lasse und die Punkte dann bei dem Wert sind wo auch die Linie ist, ist die Linie der Achsen im Vordergrund und nicht der Temperaturpunkt. Da brächte ich einen Stupser. Danke nochmal |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4637 Wohnort: ~/
|
Verfasst am: 12.06.2013, 16:22 Titel: |
|
|
Die Objekte werden einfach in der Reihenfolge gezeichnet, in der du sie angibst. Wenn du erst die Temperatur-Punkte zeichnest und dann die Hilfslinien, dann sind die Hilfslinien natürlich im Vordergrund und überdecken die Temperatur-Punkte.
Zu den zu großen Zahlen kann ich nur vorschlagen, die Zahlen selbst über Zeichenbefehle zu zeichnen. DRAW ist in diesem Zusammenhang recht praktisch. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
stepaschka55
Anmeldungsdatum: 11.06.2013 Beiträge: 9
|
Verfasst am: 12.06.2013, 21:28 Titel: |
|
|
Ich bin jetzt fertig geworden. Ich danke dir vielmals. Es hat mir richtig angefangen Spaß zu machen sowas zu programmieren. Super Hilfe |
|
Nach oben |
|
|
stepaschka55
Anmeldungsdatum: 11.06.2013 Beiträge: 9
|
Verfasst am: 14.06.2013, 07:22 Titel: |
|
|
Da bin ich wieder. Ich war gestern in der Schule und dort haben wir uns geeinigt, dass die Temperaturwerte nciht wie bei mir von 0-5V = 0-30 °C sondern: 0-1V = -20-0°C und 1-5V = 0-80°C. Jetzt weiß ich leider nciht wie ich in qbasic die werte der Spannungen zu den Temperaturen zuordnen kann und überhaupt wie ich das im Minusbereich mache. Und ich dachte, ich sei fertig |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 14.06.2013, 11:11 Titel: |
|
|
WENN Spannung KLEINER 1Volt DANN ist das ERGEBNISS, TEMPERATURBEREICH-1 GETEILT durch SPANNUNGSBREICH-1 MAL Aktuelle Spannung ANSONSTEN ist das ERGEBNISS TEMPERATURBEREICH-2 GETEILT durch SPANNUNGSBREICH-2 MAL Aktuelle Spannung.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4637 Wohnort: ~/
|
Verfasst am: 14.06.2013, 18:58 Titel: |
|
|
stepaschka55 hat Folgendes geschrieben: | Und ich dachte, ich sei fertig |
Hier liegt der Fehler - Programme sind niemals fertig.
Den Negativbereich bekommst du, indem du die gezeichneten Punkte höher zeichnest (nicht (x, 200-y), sondern (x, 180-y) oder so etwas in der Art); dann hast du bei negativen Ergebnissen von y nach unten noch Platz für die Anzeige. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
stepaschka55
Anmeldungsdatum: 11.06.2013 Beiträge: 9
|
Verfasst am: 15.06.2013, 10:49 Titel: |
|
|
So, jetzt sage ich nicht dass ich fertig bin aber ich habe die Aufgabe erstmal geschafft. und wie das so aussieht würde ich in den nächsten Tagen das Bild hier posten. habe jetz7t eine Skala von -20 bis +80 °C ich bin begeistert. Da musste ich nur eine Formel finden die dazu passt und der rest war easy |
|
Nach oben |
|
|
|