Fehlerhafte Darstellung eines mit php imagefilledarc gezeichneten Tortendiagramms bei 75% / 270°

Liebe Traumprojekt Benutzer,

wie Ihr sicherlich bemerkt habt, ist das Traumprojekt eine gewisse Zeit nicht erreichbar gewesen.
Der Hauptgrund dafür ist, dass es einen Betreiberwechsel gegeben hat.
Nähere Info´s dazu bekommt Ihr in einem separaten Thema.

Bitte gebt uns etwas Zeit den Wechsel reibungslos über die Bühne zu bringen.

Mit freundlichen Grüßen Traumprojekt-Team
  • Hallo,

    ich habe folgendes Problem: Die Ergebnisse einer Umfrage sollen als Tortendiagramm angezeigt werden, bei einfachen entweder/oder-Antworten reicht dazu ja ein einfaches Tortendiagramm aus. Dieses wird auch korrekt gezeichnet, solange das Ergebnis nicht in die Nähe von 75% (270°) kommt. Dann spinnt das Programm auf einmal rum und lässt eine große Lücke in dem Diagramm auftauchen. Hier mal ein Screenshot, wenn das Problem auftaucht. Sobald die Zahlen den Bereich um 75% verlassen ist alles wieder in Ordnung




    Der Quellcode sieht folgendermaßen aus:

    Code
    1. imagefilledarc($bild,70,50,95,95,0,$z1*3.6,$r,IMG_ARC_PIE);
    2. imagefilledarc($bild,70,50,95,95,$z1*3.6,0,$b,IMG_ARC_PIE);

    wobei $z1 die Prozentzahl des ersten Umfragewertes ist. Alle drei Tortendiagramme wurden mit ein und demselben PHP-Script gezeichnet.

    Eigentlich funktioniert es ja auch wunderbar, zeichnet beginnend bei 0 (15:00 Uhr) im Uhrzeigersinn das erste rote Tortenstück, bis z.B. 8,28%, das wären dann 8,28*3,6 = 29,8 = aufgerundet 30, zeichnen von 0 bis 30, dann für den Rest in blau von 30 bis 0. Setze ich nun den Wert 75,55% ein komme ich auf gerundete 272, das wäre ein fast perfektes 3/4 Tortenstück. Aber das Programm lässt die Lücke ????

    Wäre toll wenn mir jemand den entscheidenden Hinweis zu (meinem?) Denkfehler geben könnte !

    MfG

    Winti

  • Kurze Rückfrage:

    Rundest Du die Werte bevor Du malst?

    Ist also $z schon gerundet? Wenn nicht, hast Du mal probiert, was passiert, wenn Du vorher rundest (also ein $z=round($z); davor setzt)?

    Grüße vom Griechen,
    Cybergreek!

  • Nein, runden ist doch nicht notwendig, da ich ja nur %-Werte an das Zeichenprogramm sende und dort mit $z1*3.6 in Gradzahlen umrechne. Die Kommastellen werden vom Zeichenprogramm wohl doch ignoriert, denn halbe Pixel kann man ja eh nicht malen geschweige denn mit bloßem Auge unterscheiden ;o)

  • Ich habe dafür noch mal ein Testprogramm angefertigt uns siehe da, der Fehler taucht auch bei 25% (90°) auf ????


         


    aber eben nur da ????? Warum kommt hier bei 25*3,6 eindeutig nicht 90 heraus ???

  • Ok, dann wissen wir zumindest, dass es nicht dran liegt ;)


    Hast Du mal das vollständige Skript um das Bild zu erstellen? Dann würde ich das mal bei mir probieren.

    Grüße vom Griechen,
    Cybergreek!

  • Gerne, hier das Skript:

    Ich habe es gerade noch mal mit einer Schleife getestet, auch hier :



  • Zitat

    Jetzt bin ich verwirrt.

    geht mir genauso ?(


    Zitat

    Hast Du das Skript von oben auch mal als einzelnen Datei probiert?

    Wenn es da bei Dir auch nicht klappt, dann kann es mit der php-Version zusammenhängen.


    ja, aber verhält sich genauso, egal ob die Zahl nun als Wert übergeben wird oder das Programm von festen Werten ausgeht.


    Aber warum sollte denn die php-Version dafür ausschlaggebend sein, der imagefilledarc-Befehl hat doch eine feste Syntax, warum sollte dann eine andere php-Version diesen Befehl anders (falsch) interpretieren ?

    Meine Skripte laufen auf einem Server von hosteurope, phpinfo() meldet die Version

    pasted-from-clipboard.png

    PHP Version 5.6.30-he.0

  • und das sind anscheinend Einstellung die Grafik betreffend:

    gd

    GD Support enabled
    GD Version bundled (2.1.0 compatible)
    FreeType Support enabled
    FreeType Linkage with freetype
    FreeType Version 2.5.2
    GIF Read Support enabled
    GIF Create Support enabled
    JPEG Support enabled
    libJPEG Version 6b
    PNG Support enabled
    libPNG Version 1.2.50
    WBMP Support enabled
    XPM Support enabled
    libXpm Version 30411
    XBM Support enabled
    gd.jpeg_ignore_warning 0
  • Aber warum sollte denn die php-Version dafür ausschlaggebend sein, der imagefilledarc-Befehl hat doch eine feste Syntax, warum sollte dann eine andere php-Version diesen Befehl anders (falsch) interpretieren ?


    Berechtigte Frage, ich hätte aber keine Idee, was sonst anders sein sollte und warum es bei mir geht.

    Bei mir läuft php in v5.5.38 und die gd-Werte stimmen alle überein bis auf libJPEG Version die bei mir auf 8 steht.


    Was passiert denn, wenn Du bei 12 Uhr anfangen lassen würdest?

    Also:

    Code
    1. imagefilledarc($bild,50,50,95,95,-90,($z1*3.6)-90,$r,IMG_ARC_PIE);
    2. if ($z1<100) imagefilledarc($bild,50,50,95,95,($z1*3.6)-90,-90,$b,IMG_ARC_PIE);

    Kommt wahrscheinlich auf's gleiche raus, aber sonst hätte ich keine Idee, was man variieren könnte.

    Grüße vom Griechen,
    Cybergreek!

  • Vielen Dank für Deine Mühe, ich habe mal den Tip mit 12:00 übernommen und :




    jetzt sieht es noch wilder aus :rolleyes: und es wird konsequent bei jeder Zahl ein (oder gar zwei) Teil(e) offengelassen.

    Ich werde mal testweise andere PHP-Versionen einsetzen, muss dazu nur mal was im Netz an Speicherplatz finden .....

  • So, das war's ! Ich geb's auf ! Ist tatsächlich von der php-Version abhängig ob es funktioniert oder nicht:

    Ein Versuch auf einer PHP Version 5.4.4-14+deb7u14

    ergab dieses Bild:


    Jetzt erklär mir einer doch bitte noch, WARUM das so ist ?

  • So, das war's ! Ich geb's auf ! Ist tatsächlich von der php-Version abhängig ob es funktioniert oder nicht:


    Sehr gut, dass Du ne Lösung hast :thumbup:

    Jetzt erklär mir einer doch bitte noch, WARUM das so ist ?

    Sieht nach Bug in der php-Version aus. Aber wenn Dir das einer vernünftig erklären kann, dann soll er das hier auch mal machen ;)

    Grüße vom Griechen,
    Cybergreek!