Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problemstellung: Poly-Fläche aus Imagemap berechnen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Problemstellung: Poly-Fläche aus Imagemap berechnen

    Hallo zusammen,

    Folgende Problem-Stellung:
    Aus einer Image<map> muss ich die <area> mit der größten Fläche finden.

    Das Gute:
    Für das "rect" und "circle" habe ich bereits eine Lösung.

    Das Schwierige:
    Wie kann ich die Fläche unterschiedlicher "poly" berechnen? Ich suche seit mehreren Tagen im Netz. Leider werde ich nicht fündig.

    Als Beispiel:
    Eine Imagemap mit folgenden Areas, finde die größte Fläche:

    Code:
    <area shape="poly" coords="2,5,32,1,33,22,51,36,33,57" title="The Americas">
    <area shape="poly" coords="57,14,70,2,111,3,114,23,97,34" title="Eurasia">
    <area shape="poly" coords="57,14,86,29,73,52,66,49,50,28" title="Africa">
    <area shape="poly" coords="105,40,108,49,122,52,127,41,117,34" title="Australia">
    Ich danke Euch recht herzlich!

  • #2
    Wenn es da etwas fertiges gibt, dann das benutzen. Ich hatte sowas jetzt noch nicht. Wenn ich mich richtig erinnern kann, dann braucht man dafür den Satz des Heron und muss das Vieleck dann in viele kleine Dreiecke zerlegen, deren Winkel des Ausgangsppunkts nicht größer als 180° ist:



    Der Ausgangspunkt sollte aber alle anderen Punkte sehen können. Wenn das Vieleck komplexer ist, müsste ich erst drüber nachdenken...

    Kommentar


    • #3
      Ich suche seit mehreren Tagen im Netz
      Warum find ich sowas nach 2 Minuten..
      Wenn es nur an einer Formel(anleitung) fehlt: Die Fläche eines Vielecks berechnen

      Kommentar


      • #4
        jo, mal klassiv analog der fortgeschrittenen announce.

        http://www.arndt-bruenner.de/mathe/g.../flaechen1.htm
        http://www.uni-landau.de/rasch/Geome...olygone%29.pdf

        aber wie rkr schon andeutet, ne eigene herleitung ist nicht unmöglich.

        Kommentar


        • #5
          Erst einmal vielen Dank.

          @jspit, ich habe diese Url bereits besucht gehabt, nur verstehe ich nicht, wie ich daraus eine PHP-Funktion schraube, so dass es mir die Fläche berechnet.

          Danke.

          Kommentar


          • #6
            Indem du aus deinen x1,y1,x2,y2.. koordinaten ersmal ein zweidimensionales Array machst, von welchen der Link ausgeht:
            PHP-Code:
            $coords="2,5,32,1,33,22,51,36,33,57";

            $c explode(',',$coords);  //1.Dim Array erstellen

            $array array_chunk($c,2);  //2.Dim array

            $array[] = $array[0];  //erste Zeile dranhängen

            //testausgabe
            debug::write($array); 
            Code:
            array (
              0 => 
              array (
                0 => "2",
                1 => "5",
              ),
              1 => 
              array (
                0 => "32",
                1 => "1",
              ),
              2 => 
              array (
                0 => "33",
                1 => "22",
              ),
              3 => 
              array (
                0 => "51",
                1 => "36",
              ),
              4 => 
              array (
                0 => "33",
                1 => "57",
              ),
              5 => 
              array (
                0 => "2",
                1 => "5",
              ),
            )
            Der Rest ist nur noch eine for-Schleife mit der Summierung. Ausgehend von einem Array würde ich dafür eine Funktion machen.

            LG jspit

            Kommentar


            • #7
              in Javascript könnte es so aussehen:
              Code:
              function flaechePoly(coords) { 
                flaeche = 0; 
                _k=0;
                x=[];
                y=[];
              	for(i=0;i < coords.length; i+=2){
              		x[_k]=coords[i];
              		y[_k]=coords[i+1];
              		_k++;
              	}
                _j = x.length-1;
                for (i=0; i < x.length; i++)
                  { flaeche = flaeche +  (x[_j]+x[i]) * (y[_j]-y[i]); 
                    _j = i;
                  }
                return flaeche/2;
              }
              coords = [2,5,32,1,33,22,51,36,33,57];
              alert(flaechePoly(coords));
              Folgende Einschränkungen, da ja alles nicht so schön ist, wie es im Lehrbuch erscheint:

              Sind die Punkte nicht im Uhrzeigersinn notiert - wird die Fläche mit minus als Vorzeichen ausgegeben.

              Die wesentlichste Einschränkung ist aber, dass dieser Ansatz nicht dazu geeignet ist, Flächen bei sich kreuzenden Polygonen zu ermitteln.

              Kommentar


              • #8
                Zitat von jspit Beitrag anzeigen
                Indem du aus deinen x1,y1,x2,y2.. koordinaten ersmal ein zweidimensionales Array machst, von welchen der Link ausgeht:
                PHP-Code:
                $coords="2,5,32,1,33,22,51,36,33,57";

                $c explode(',',$coords);  //1.Dim Array erstellen

                $array array_chunk($c,2);  //2.Dim array

                $array[] = $array[0];  //erste Zeile dranhängen

                //testausgabe
                debug::write($array); 
                Eine bescheidene Frage, warum hängst Du die erste Zeile nochmal dran?

                Kommentar


                • #9
                  Das Anhängen der 1.Zeile erfolgte ohne großes Nachdenken durch eine 1:1 Umsetzung der Anleitung im obigen Link #3.

                  Kommentar


                  • #10
                    Ach so, ist ja auch egal, schadet nichts, nützt aber auch nichts. Ich hatte es in JS erledigt, ist aber 1:1 in PHP umsetzbar....

                    Kommentar


                    • #11
                      Danke!

                      Kommentar


                      • #12
                        Zitat von php4ever99 Beitrag anzeigen
                        Danke!
                        Bitte. Für alle stillen Mitleser wäre es interessant zu wissen, wie deine Lösung nun aussieht.

                        Kommentar


                        • #13
                          Er hat ja immerhin schon "Danke!" geschrieben, manch andere nehmen sich die Lösung und verschwinden auf Nimmerwiedersehen. Beim nächsten Problem, neuer Nutzername, Frage, Antwort und weg...

                          Kommentar

                          Lädt...
                          X