INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Mathe-(nach)-hilfe für UTFT
21.08.2015, 16:23 (Dieser Beitrag wurde zuletzt bearbeitet: 21.08.2015 16:24 von rkuehle.)
Beitrag #1
Mathe-(nach)-hilfe für UTFT
Hallo Leute,
ich schreibe mir gerade ein paar Routinen zur Darstellumng von verschiedenen Diagrammtypen auf GLCD mit Hilfe der UTFT-Libs. Ein Diagrammtyp wäre da das Kreisdiagramm. Die UTFT-Libs bieten ja über die Geometriefunktionen "nur" die Möglichkeit die Konturen eines Kreissektors darzustellen ( .drawPie() ), diesen jedoch nicht zu füllen. Also bin ich ran und habe, wie hier zu sehen https://de.wikipedia.org/wiki/Kreissegment , erstmal das im Kreissektor befindliche Dreieck eingezogen und gefüllt.

Meine Frage:
Gibt es eine mathematische Möglichkeit die im Kreissegment befindlichen Punkte zu ermitteln (um sie dann zu pixeln)? Ich meine damit nicht de Berechnung des Flächeninhaltes des Kreissegmentes.

Wenn nicht müsste ich über die Steigung der Sehne des Kreises die xy-Koordinaten der Punkte der Sehne und des Kreisbogens berechnen und diese per drawLine() verbinden. Das ergibt aber unter Umständen gebrochene Linien, was nicht so doll aussieht.

Wäre nett wenn jemand eine Antwort zu meiner Frage beisteuern könnte.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.08.2015, 19:56 (Dieser Beitrag wurde zuletzt bearbeitet: 21.08.2015 20:18 von HaWe.)
Beitrag #2
RE: Mathe-(nach)-hilfe für UTFT
statt Pixel in das Tortenstück einzufügen (was wschl extrem viel float-Rechnerei für hunderte oder tausende Pixel bedeutet) würde ich wohl eher den gefüllten Pie selber aus Linien zeichnen, die vom Mittelpunkt des Kreises (Spitze) ausgehend farbige Linien mit identischem Radius im Uhrzeigersinn nebeneinandersetzen, bis der Endwinkel erreicht ist. Vielleicht reicht ein stückweise Aneinandersetzen der Einzel-Radien in 10-tel Grad-Schritten, musst du mal ausprobieren.
Ist aber sicher auch viel langwierige float Rechnerei mit trigonom. Funktionen, aber möglicherweise doch insg. schneller, da ja Linienzeichnen an sich schnell geht.
Du brauchst dazu nur 1 Funktion
drawlineangle(float x, float y, float len, float angle),
die eine Linie von (x,y) und der Länge len im Winkel angle auf den Bildschirm zaubert (rel. zur x-Achse = Null-Linie).
Wenn du die hast, ist gut, wenn nicht, kann ich versuchen, sie dir zu schreiben! Smile

Der gefüllte Pie entsteht dann wie gesagt aus mehrfachem Aufruf dieser Funktion beginnend mit dem Anfangswinkel, bis schrittchenweise der Endwinkel erreicht ist.

(ich hoffe das war jetzt halbwegs verständlich formuliert) Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.08.2015, 23:29
Beitrag #3
RE: Mathe-(nach)-hilfe für UTFT
Danke HaWe für den Lösungsweg.
Ich hatte anfänglich was ähnliches getestet, allerdings nicht bis zu Ende gedacht. Da hatte ich dusseligerweise anstatt einzelner Linien komplette Pies pro Winkelgrad gezeichnet. Dein Vorschlag reduziert das auf das Notwendige. Mal sehen ob die Linien einigermaßen aussehen. Wie so oft, man muss einfach mal darüber reden. Danke nochmal.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.08.2015, 07:57
Beitrag #4
RE: Mathe-(nach)-hilfe für UTFT
immer gern Smile
sag mal Bescheid, ob und wie es klappt, evtl auch mit der Schrittchen-Gradzahl, die gerade noch vertretbar ist. Die könnte man der Linienlänge vllt sogar anpassen:
sehr kurze Linien in 1/2-Grad-Schritte, sehr lange Linien in 1/10 Schritten, und Rest irgendwas dazwischen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.08.2015, 09:12
Beitrag #5
RE: Mathe-(nach)-hilfe für UTFT
Moin HaWe,
ich mache es im Moment so:
Code:
...
geo.drawPie(x,y,r,startAngle,endAngle);
fillPie(x,y,r,startAngle,endAngle);
....
void fillPie(int x, int y, int r, int startAngle, int endAngle)
{
  float steps=0.2;
  int x1,y1,x2,y2;
  x1=x + cos((startAngle*3.14)/180) * r;
  y1=y + sin((startAngle*3.14)/180) * r;
  for (float i=startAngle+steps;i<endAngle;i=i+steps)
  {
    x2=x + cos(((startAngle+i)*3.14)/180) * r;
    y2=y + sin(((startAngle+i)*3.14)/180) * r;
    if ((x1!=x2) or (y1!=y2))
    {
      myGLCD.drawLine(x,y,x2,y2);
    }
    x1=x2;
    y1=y2;
  }
}
Aber irgendwie komme ich mit einer 90 Grad Verschiebung zwischen den Konturen des Schnittchen und den Fülllinien nicht hin. Die Steps sind noch ein Problem bzw. habe ich noch keine sinnvolle Regel gefunden um eine saubere Füllung (ohne Lücken) zu erreichen. Die if-Anweisung benutze ich um wirklich nur die Linien zu zeichnen welche auf neuen Koordinaten liegen.

Wie du siehst sicher noch verbesserungswürdig. Jeder Tipp/Hinweis ist willkommen.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.08.2015, 09:37 (Dieser Beitrag wurde zuletzt bearbeitet: 23.08.2015 09:39 von HaWe.)
Beitrag #6
RE: Mathe-(nach)-hilfe für UTFT
hi,
ich habe im Augenblick kein UTFT-Display mehr in Betrieb, nur eins mit den Adafruit-libs.
Der Nachteil ist nämlich, dass UTFT kein Hardware-SPI unterstützt.

Was ich noch gar nicht verstehe ist das mit den 90°,
und deinen Code verstehe ich auch noch nicht recht, warum du z.B.
x,x1, x2 und y,y1,y2
brauchst: du brauchst doch nur 2 Koordinaten zum Linienzeichnen?

Aber wenn ich das alte Display wieder ausgrabe: schreib doch mal bitte einen komplett fertigen Sketch, den ich einfach copy+pasten kann. Ich kann es dann sicher auch bald mal selber bei mir überprüfen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.08.2015, 09:57
Beitrag #7
RE: Mathe-(nach)-hilfe für UTFT
Moin nochmal,

die Variablen haben folgende Bedeutung:
x,y -> Koordinaten des Kreismittelpunktes / Startkoordinaten aller Linien
x1,y1 -> Endkoordinaten der vorhergehenden Füllinie
x2,y2 -> Endkoordinaten der aktuellen Fülllinie
Nur wenn die Endkoordinaten der vorhergehenden Fülllinie ungleich den Endkoordinaten der aktuellen Fülllinie sind, wird die aktuelle Fülllinie auch gezeichnet.
Die Unterteilung in x1,y1 und x2,y2 existiert nur wegen diesem Vergleich, spart aber etliches an drawLine()-Aufrufen ohne dass sich der Füllungsgrad verschlechtert.

Wenn ich drawPie() und fillPie() mit den Winkelangaben aufrufe haben die Konturen des Pie und die im Pie zu zeichnenden Linien einen Versatz von 90 Grad.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.08.2015, 10:41 (Dieser Beitrag wurde zuletzt bearbeitet: 23.08.2015 10:43 von HaWe.)
Beitrag #8
RE: Mathe-(nach)-hilfe für UTFT
das mit dem 90° Versatz klingt, als ob beide Koordinatensysteme um 90° verdrehte Achsen haben, das kann an der Display-Geometrie liegen (oder an einem Rechenfehler Polar<->kartesische Koordinaten Wink )
Immerhin ist ja der Nullpunkt in der Mathematik unten, und y geht nach oben, bei den Displays ist aber der Nullpunkt oben links und y geht nach unten 8-)

addiere doch einfach mal immer 90° dazu (oder zieh sie ab) oder nimm +/- sin statt cos und umgekehrt (cos (a) = sin(a+90) )
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino funktioniert immer erst nach reset Maxi290997 11 758 25.07.2017 09:38
Letzter Beitrag: Maxi290997
  Ublox Neo 6M und Nextion ! Bitte um Hilfe. b3ta 19 811 13.07.2017 14:52
Letzter Beitrag: Tommy56
  Anfänger sucht erfahrene Hilfe Customizer 21 1.173 11.07.2017 21:37
Letzter Beitrag: Customizer
  LEDs und Sound synchron nach kurzem Tastendruck Thor Wallhall 32 1.274 24.06.2017 21:01
Letzter Beitrag: georg01
  Bitte um Hilfe Arduino Nano-MAX7219-PIR_Sensor Opa_Klaus 35 1.511 20.05.2017 21:11
Letzter Beitrag: Opa_Klaus
  Brauche Hilfe für meine Abfüllanlage/ millis() Slash96 8 565 10.05.2017 21:04
Letzter Beitrag: MicroBahner
Question Problem beim Hochladen auf AtTiny45. Hilfe -.- Jonas Lindenblatt 17 1.111 16.04.2017 12:58
Letzter Beitrag: Jonas Lindenblatt
  Zeitschaltuhr Hilfe für RTC Anfänger 4Jordy 4 465 24.03.2017 15:23
Letzter Beitrag: MicroBahner
  Neustart nach SD-Kartentausch erforderlich? Retian 10 577 27.02.2017 20:41
Letzter Beitrag: Retian
  Hilfe bei Taster huber5093 11 574 14.02.2017 19:26
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste