Markus B.: Werte komprimieren/zusammenrücken

Hi,
Ich habe zurzeit mehrer Probleme, aber ich erläuter hier mal nur eins^^

Nachdem ich die Werte aus der Xml heruasgeholt habe und in prozent zum MaxVvalue ausgerechnet habe will ich die nun so komprimieren:

1. Die 100% sollen bei 16% liegen
2. DIe 0% wenn vorhanden bei 95%
3. Der WERT 100 muss bei 76% liegen

Mir würde es auch sonst ERSTMAL reichen wenn man punkt 2 rausnimmt.

Wie kann ich das jetzt bestimmen dass er das so machen soll?

Ich hatte schon die idee mit 0.6*x jedoch ist das dann nur aufeiner seite komprimiert und funktioniert somit nicht richtig.

Kann mir da jmd helfen?

Hier der Code mit einen anderen Versuch der auch nicht funktioniert hat.

<xsl:when test="following-sibling::value[position() = 1]">

<line x1="{$share}%" y1="{76-((0.6*((100*(.)) div ($MaxV))))}%" x2="{$share*2}%"
                            y2="{76-(0.6*(100*(following-sibling::value[position() = 1])) div (($MaxV)))}%"/>

</xsl:when>

Danke
Markus

  1. Hallo,

    Ich habe zurzeit mehrer Probleme, aber ich erläuter hier mal nur eins^^

    Mache ich auch mit zwei Links und einem Satz:

    Lieber Markus, lese bitte verflixt nochmal die Tipps für Fragende durch!

    https://forum.selfhtml.org/?t=177274&m=1167928

    Grüße
    Thomas

    1. sry eben war das noch nicht da ich ändere dass dann ma kurz und durchlesen tue ich es auch.

      1. So dann hier erstmal die XML:

          
        <data>  
            <Intervall name="30.05.2003">  
                <value>111</value>  
                <value>105</value>  
                <value>110</value>  
                <value>115</value>  
            </Intervall>  
            <Intervall name="30.05.2001">  
                <value>120</value>  
                <value>125</value>  
                <value>130</value>  
                <value>135</value>  
            </Intervall>  
            <Intervall name="30.05.2005">  
                <value>140</value>  
                <value>145</value>  
                <value>150</value>  
                <value>155</value>  
            </Intervall>  
            <Intervall name="30.05.2006">  
                <value>160</value>  
                <value>165</value>  
                <value>170</value>  
                <value>175</value>  
            </Intervall>  
          
        </data>
        

        Also jetzt nochma einfacher erklärt,
        Ich möchte diese Werte in einer Grpahik darstelle als Linie die von 50 bis max in die höhe geht.
        Der Min wert, soll bei 76% in der Grpahik starten und dann halt eine entwicklung anzeigen. Der Max wert liegt bei 16%. Wenn der wert unter 100 fälllt, will ihc erstmal vernachlässigen um erstmal die basis hinzukriegen.

        kann man vl. iwie ein Definitionsbrech erstelen mit xslt?

        sonst könnte man doch, also in mathe würd ich(bzw der nette typ aus nem anderen Forum^^) es so machen:

        M ist max und x ist mein Wert als bruch ( 50% = 5/10 usw.)

        f(x)=((x-100)/(M-100))⋅(76-16)+16= ((x-100)(M-100))⋅60+16

        mit dem Definitionsbereich x∈[100,M], wobei M>100 sein muss.

        das wäre jetzt noch eine Idee.

        den code hier, der funktionier so aber nicht weil er hier eine obergrenze hat aber sonst der rest nciht richitg und bei "16-" eine untergrenze aber sonst nix richitg.

          <xsl:when test="following-sibling::value[position() = 1]">  
                            <g class="Lines1">  
                                <line x1="{$share}%" y1="{76-((0.6*((100*(.)) div ($MaxV))))}%"  
                                    x2="{$share*2}%"  
                                    y2="{76-(0.6*(100*(following-sibling::value[position() = 1])) div (($MaxV)))}%"  
                                />  
                            </g>  
                        </xsl:when>
        

        Ihc hoffe das ist jetzt ok so

        Markus

        1. Abgesehen davon,

          dass du wenigstens dein Posting noch einmal durchlesen könntest, bevor du es versendest (zaehle mal deine Wortfehler), verstehe ich es immer noch nicht. Wo liegt deine Problem? Ich wuerde vorschlagen, dass du in einem ersten Schritt dein Problem in ein separates template auslagerst, um die Struktur übersichtlich zu halten.

            
            
          <xsl:template match=".....  >  
          ...  
           <xsl:when test="following-sibling::value[position() = 1]">  
             <xsl:call-template name="WriteTheLine">  
               <xsl:with-param name="M" = "$MaxV"/>  
               <xsl:with-param name="X" ="......  />  
               ....  
             </xsl:call-template>  
           </xsl:when>  
          ...  
          </xsl:template>  
            
          <xsl:template name="WriteTheLine">  
            <xsl:param name="M"/>  
            <xsl:param name="X"/>  
            ...  
            <!-- Und hier mal bitte etwas besser erläutern, was getestet werden soll -->  
             <!-- Ein plastisches Beispiel mit Zahlen wuerde helfen -->  
            
          </xsl:template>  
            
          
          

          Man will dir ja hier wirklich helfen, aber auch uns ist Zeit kostbar und ungern genutzt um Kryptisches zu verstehen ;-)

          1. Ja hast recht ist doch ein wenig unverständlich.
            Also, ich habe eine svg grafik die eine Wertentwicklung anzeigt. Ich habe verschieden values in Intervallen. Der erste Value vom ersten Intervall soll der start beginnn sein, welcher bei x=5% und y =76% start (Sozusagen: Hätter der WErt 100EUro gehabt dann wäre die wertentwicklung so, wenn du verstehst, also start immer bei 100 euro) und dann wird immer der nächste value genommen.

            Jetzt will ich die steigerung anzeigen in einer Linie.
            Das Problem ist das wenn ich ihm sage er soll bei 16% anfangen prozentual die linie zu steigern, kennt er keine ober grenze und komprimiert die Werte nicht so dass sie die Wertentwicklung zwischen y=16% und y=76% angezeigt werden.#

            Man bräuchte also sozusagen diese Funktion irgendwie in der Xslt transformation, zumindest wäre das meine Idee

            Das template hab ihc dann mal geändert, aber es steht ja schon da von dir.

            Zum Test:

            Ich weiss jetzt nicht wirklich was du meinst...

            Ich will doch nur testen ob ein nächster wert vorhanden ist und wenn nicht dann soll er abbrechen.

            Er soll dann x1="...." y1="1 value, irgendwie umgrechnet" x2="..." y="2 value,...."

            und dann soll kommen:
            x.. y1="2 value,.." ... y2="3 value" usw.

            Sowas wie hier soll das mal werden:
            Grafik

            Danke
            Markus

            1. OK, letzter Versuch,

              gib mal die XML Quelle und wie das Ergebnis aussehen soll und welche Formel genau verwendet werden soll. Ansonsten sitzen wir noch naechste Woche daran.

              1. Ok Ich mach es mal ganz simpel mit der Xml:

                  
                <data>  
                    <Intervall name="30.05.2003">  
                        <value>100</value>  
                        <value>50</value>  
                        <value>105/value>  
                        <value>145</value>  
                 </Intervall>  
                </data>  
                
                

                Ausgang soll dann ungefähr so sein:

                <svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="50%" height="50%">  
                   <g class="Background-rect">  
                      <rect width="100%" height="100%"/>  
                   </g>  
                  
                   <g class="Lines3">  
                <line x1="5%" y1="50%" x2="95%" y2="90%"/>  
                <line x1="5%" y1="90%" x2="95%" y2="55"/>  
                <line x1="5%" y1="55%" x2="95%" y2="10%"/>  
                  
                  
                   </g>  
                
                

                Und wenn ihc was veränder z.B:

                <data>  
                    <Intervall name="30.05.2003">  
                        <value>100</value>  
                        <value>10</value>  
                        <value>80/value>  
                        <value>110/value>  
                        <value>150/value>  
                  
                 </Intervall>  
                </data>  
                  
                   <g class="Lines3">  
                <line x1="5%" y1="35%" x2="95%" y2="90%"/>  
                <line x1="5%" y1="90%" x2="95%" y2="45%"/>  
                <line x1="5%" y1="45%" x2="95%" y2="30%"/>  
                <line x1="5%" y1="30%" x2="95%" y2="10%"/>  
                  
                   </g>
                

                Ihc hoffe man kann jetzt verstehen was ich meine