Jochen: Rekursive Funktion liefert ungewünschtes Ergebnis

Beitrag lesen

Hallo Forum,

ausgehend von dieser Aufgabenstellung wollte ich den Code in eine schöne Funktion ausgliedern.

Hier nochmal die Aufgabe:

Suche ein Image der Größe 842 x 532 von unten nach oben (bis zur y-Grenze 500) nach dem ersten freien Raum ab, der 150px hoch ist.

Hier die Funktion:

function suche_freiraum($line = 842,$img2) {
    $freiraum = $failed = 0;
    $fp = fopen($_SERVER['DOCUMENT_ROOT']."/tmp/pixel.txt",'a+');
    for($myY = $line;$myY > 500;$myY--) {
        for($myX = 0;$myX < 530;$myX++) {
            $pixel = $img2->getImagePixelColor($myX,$myY);
            $colors = $pixel->getColorAsString();
            if($colors != "srgba(255,255,255,0)" && $colors != "srgb(255,255,255)") {   // wenn kein weißes Pixel
                $failed++;
            }
        }
        // Line zuende und failed noch auf 0 ?
        if($failed == 0) {
            $freiraum++;
            fwrite($fp,"line ".$myY.": all white. Freiraum = ".$freiraum."\n");
        } else {
            fwrite($fp,"line ".$myY.": failed\n");
            suche_freiraum($myY-1,$img2);
        }
        if($freiraum == 150) {
            fclose($fp);
            return $myY;
        }
    }
    fclose($fp);
    return 0; // kein Freiraum gefunden
}

Funktioniert sehr gut, wenn das Image innerhalb der untersten 150px komplett weiß ist.

Aber wenn innerhalb der untersten 150px nicht alles weiß ist, dann merke ich, dass da noch ein Fehler in der Funktion steckt.

Denn dann erhalte ich sowas hier: (sorry für den langen Text, aber ansonsten erkennt man das Schema des fehlers vielleicht nicht).

Erkennt jemand, wo es in der Funktion hakt?

Jochen

line 842: all white. Freiraum = 1
line 841: all white. Freiraum = 2
line 840: all white. Freiraum = 3
line 839: all white. Freiraum = 4
line 838: all white. Freiraum = 5
line 837: all white. Freiraum = 6
line 836: all white. Freiraum = 7
line 835: all white. Freiraum = 8
line 834: all white. Freiraum = 9
line 833: all white. Freiraum = 10
line 832: all white. Freiraum = 11
line 831: all white. Freiraum = 12
line 830: all white. Freiraum = 13
line 829: all white. Freiraum = 14
line 828: all white. Freiraum = 15
line 827: all white. Freiraum = 16
line 826: all white. Freiraum = 17
line 825: all white. Freiraum = 18
line 824: all white. Freiraum = 19
line 823: all white. Freiraum = 20
line 822: all white. Freiraum = 21
line 821: all white. Freiraum = 22
line 820: all white. Freiraum = 23
line 819: all white. Freiraum = 24
line 818: all white. Freiraum = 25
line 817: all white. Freiraum = 26
line 816: all white. Freiraum = 27
line 815: all white. Freiraum = 28
line 814: all white. Freiraum = 29
line 813: all white. Freiraum = 30
line 812: all white. Freiraum = 31
line 811: all white. Freiraum = 32
line 810: all white. Freiraum = 33
line 809: all white. Freiraum = 34
line 808: all white. Freiraum = 35
line 807: all white. Freiraum = 36
line 806: all white. Freiraum = 37
line 805: all white. Freiraum = 38
line 804: all white. Freiraum = 39
line 803: all white. Freiraum = 40
line 802: all white. Freiraum = 41
line 801: all white. Freiraum = 42
line 800: all white. Freiraum = 43
line 799: all white. Freiraum = 44
line 798: all white. Freiraum = 45
line 797: all white. Freiraum = 46
line 796: all white. Freiraum = 47
line 795: all white. Freiraum = 48
line 794: all white. Freiraum = 49
line 793: all white. Freiraum = 50
line 792: all white. Freiraum = 51
line 791: all white. Freiraum = 52
line 790: all white. Freiraum = 53
line 789: failed
line 788: failed
line 787: failed
line 786: failed
line 785: failed
line 784: failed
line 783: failed
line 782: failed
line 781: failed
line 780: all white. Freiraum = 1
line 779: all white. Freiraum = 2
line 778: failed
line 777: failed
line 776: failed
line 775: failed
line 774: failed
line 773: failed
line 772: failed
line 771: failed
line 770: failed
line 769: failed
line 768: all white. Freiraum = 1
line 767: all white. Freiraum = 2
line 766: all white. Freiraum = 3
line 765: failed
line 764: failed
line 763: failed
line 762: failed
line 761: failed
line 760: failed
line 759: failed
line 758: failed
line 757: all white. Freiraum = 1
line 756: all white. Freiraum = 2
line 755: all white. Freiraum = 3
line 754: all white. Freiraum = 4
line 753: all white. Freiraum = 5
line 752: all white. Freiraum = 6
line 751: all white. Freiraum = 7
line 750: all white. Freiraum = 8
line 749: all white. Freiraum = 9
line 748: all white. Freiraum = 10
line 747: all white. Freiraum = 11
line 746: all white. Freiraum = 12
line 745: all white. Freiraum = 13
line 744: all white. Freiraum = 14
line 743: all white. Freiraum = 15
line 742: all white. Freiraum = 16
line 741: all white. Freiraum = 17
line 740: all white. Freiraum = 18
line 739: all white. Freiraum = 19
line 738: all white. Freiraum = 20
line 737: all white. Freiraum = 21
line 736: all white. Freiraum = 22
line 735: all white. Freiraum = 23
line 734: all white. Freiraum = 24
line 733: all white. Freiraum = 25
line 732: all white. Freiraum = 26
line 731: all white. Freiraum = 27
line 730: all white. Freiraum = 28
line 729: all white. Freiraum = 29
line 728: all white. Freiraum = 30
line 727: all white. Freiraum = 31
line 726: all white. Freiraum = 32
line 725: all white. Freiraum = 33
line 724: all white. Freiraum = 34
line 723: all white. Freiraum = 35
line 722: all white. Freiraum = 36
line 721: all white. Freiraum = 37
line 720: all white. Freiraum = 38
line 719: all white. Freiraum = 39
line 718: all white. Freiraum = 40
line 717: all white. Freiraum = 41
line 716: all white. Freiraum = 42
line 715: all white. Freiraum = 43
line 714: all white. Freiraum = 44
line 713: all white. Freiraum = 45
line 712: all white. Freiraum = 46
line 711: all white. Freiraum = 47
line 710: all white. Freiraum = 48
line 709: all white. Freiraum = 49
line 708: all white. Freiraum = 50
line 707: all white. Freiraum = 51
line 706: all white. Freiraum = 52
line 705: all white. Freiraum = 53
line 704: all white. Freiraum = 54
line 703: all white. Freiraum = 55
line 702: all white. Freiraum = 56
line 701: all white. Freiraum = 57
line 700: all white. Freiraum = 58
line 699: all white. Freiraum = 59
line 698: all white. Freiraum = 60
line 697: all white. Freiraum = 61
line 696: all white. Freiraum = 62
line 695: all white. Freiraum = 63
line 694: all white. Freiraum = 64
line 693: all white. Freiraum = 65
line 692: all white. Freiraum = 66
line 691: all white. Freiraum = 67
line 690: all white. Freiraum = 68
line 689: all white. Freiraum = 69
line 688: all white. Freiraum = 70
line 687: all white. Freiraum = 71
line 686: all white. Freiraum = 72
line 685: all white. Freiraum = 73
line 684: all white. Freiraum = 74
line 683: all white. Freiraum = 75
line 682: all white. Freiraum = 76
line 681: all white. Freiraum = 77
line 680: all white. Freiraum = 78
line 679: all white. Freiraum = 79
line 678: all white. Freiraum = 80
line 677: all white. Freiraum = 81
line 676: all white. Freiraum = 82
line 675: all white. Freiraum = 83
line 674: all white. Freiraum = 84
line 673: all white. Freiraum = 85
line 672: all white. Freiraum = 86
line 671: all white. Freiraum = 87
line 670: all white. Freiraum = 88
line 669: all white. Freiraum = 89
line 668: all white. Freiraum = 90
line 667: all white. Freiraum = 91
line 666: all white. Freiraum = 92
line 665: all white. Freiraum = 93
line 664: all white. Freiraum = 94
line 663: all white. Freiraum = 95
line 662: all white. Freiraum = 96
line 661: all white. Freiraum = 97
line 660: all white. Freiraum = 98
line 659: all white. Freiraum = 99
line 658: all white. Freiraum = 100
line 657: all white. Freiraum = 101
line 656: all white. Freiraum = 102
line 655: all white. Freiraum = 103
line 654: all white. Freiraum = 104
line 653: all white. Freiraum = 105
line 652: all white. Freiraum = 106
line 651: all white. Freiraum = 107
line 650: all white. Freiraum = 108
line 649: all white. Freiraum = 109
line 648: all white. Freiraum = 110
line 647: all white. Freiraum = 111
line 646: all white. Freiraum = 112
line 645: all white. Freiraum = 113
line 644: all white. Freiraum = 114
line 643: all white. Freiraum = 115
line 642: all white. Freiraum = 116
line 641: all white. Freiraum = 117
line 640: all white. Freiraum = 118
line 639: all white. Freiraum = 119
line 638: all white. Freiraum = 120
line 637: all white. Freiraum = 121
line 636: all white. Freiraum = 122
line 635: all white. Freiraum = 123
line 634: all white. Freiraum = 124
line 633: all white. Freiraum = 125
line 632: all white. Freiraum = 126
line 631: all white. Freiraum = 127
line 630: all white. Freiraum = 128
line 629: all white. Freiraum = 129
line 628: all white. Freiraum = 130
line 627: all white. Freiraum = 131
line 626: all white. Freiraum = 132
line 625: all white. Freiraum = 133
line 624: all white. Freiraum = 134
line 623: all white. Freiraum = 135
line 622: all white. Freiraum = 136
line 621: all white. Freiraum = 137
line 620: all white. Freiraum = 138
line 619: all white. Freiraum = 139
line 618: all white. Freiraum = 140
line 617: all white. Freiraum = 141
line 616: all white. Freiraum = 142
line 615: all white. Freiraum = 143
line 614: all white. Freiraum = 144
line 613: all white. Freiraum = 145
line 612: all white. Freiraum = 146
line 611: all white. Freiraum = 147
line 610: all white. Freiraum = 148
line 609: all white. Freiraum = 149
line 608: all white. Freiraum = 150
line 757: failed
line 756: all white. Freiraum = 1
line 755: all white. Freiraum = 2
line 754: all white. Freiraum = 3
usw.
usw.
usw.