1

Temat nie jest związany z Atari, ale postuję go tutaj ponieważ czasami czytują to forum całkiem tęgie głowy ;)

Otóż rozkmina jest taka, że piszę sobie taką aplikację, która ma na celu generowanie strukturalnych wykresów kołowych w SVG i w pewnym momencie wystąpił mały zonk.

Wygooglałem taką fajna stronę z tematem podanym niemal na tacy - wszystko działa elegancko, wręcz miodzio. Wykresy rysują się pięknie i dokładnie. Niestety osoba tworząca ten tutorial nie przewidziała jednej, bardzo ważnej, rzeczy. W momencie, gdy mamy 2 elementy i struktura wygląda np. tak: 60%, 40% wykres wygląda następująco (patrz zał. 1).

Gdyby ktoś miał chwilkę czasu i zechciało mu się pogłówkować jak to ominąć to będę bardzo wdzięczny.

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

2

Tato:

podziel jeden ze składników na dwa i już:

if liczba_składników = 2 to z_jednego_składnika_zrób_dwa_i_wypełnij_tym_samym_kolorem


Dziękuję za uwagę.

All I hear is the sound of me falling on the ground

3

Tato, wszystko jest ok - na to też wpadłem, tylko że powstaje problem z obramowaniem.

Dzięki za pomoc!

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

4

mozesz zamiescic swoj kod svg ktory toto wygenerowal?

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

5

Spróbuj może tak:

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
    "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="400" height="400">
<!-- Pie chart sample -->
<path d="M200,200 L20,200 A180,180 0 0,0 338,320 z"
<!--                                 ^^^        -->
<!-- Para 0,0, żeby szedł po "długim" łuku      -->
    style="fill:#ff0000;
        fill-opacity: 1;
        stroke:black;
        stroke-width: 1"/>
<path d="M200,200 L338,320 A180,180 0 1,0 20,200 z"
    style="fill:#00ff00;
        fill-opacity: 1;
        stroke:black;
        stroke-width: 1"/>
</svg>

Pozdrowienia

Byl hrozný tento stát, když musel jsi se dívat, jak zakázali psát a zakázali zpívat,
a bylo jim to málo, poručili dětem modlit se jak si přálo Veličenstvo Kat.

6

no mysle ze takiego bladu dely nie popelnil...
przecie jasno w texcie to wytlumaczone...

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

7

mozesz zamiescic swoj kod svg ktory toto wygenerowal?

Oto kod. Tylko proszę bez śmichów-chichów - koderem to ja nie jestem ;)

<?php

$szerokosc = 400;
$wysokosc  = 400;
$promien   = 180;
$dane      = array (10,10,10);
$kolory    = array ("white", "red", "green", "yellow", "black", "gray", "lime", "pink");
$suma      = array_sum($dane);

$M1  = $szerokosc / 2;
$M2  = $wysokosc / 2;

header ("Content-type: image/svg+xml");
echo ("<?xml version="1.0" standalone="no"?>");
echo ("<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">n");
echo ("<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="400px" height="400px" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 400 400" xmlns:xlink="http://www.w3.org/1999/xlink">n");

for ($p=0; $p<count($dane); $p++) {
  $wartosc += $dane[$p];
  $kat = $wartosc / $suma;
  if ($p == 0){
    $L1  = ($szerokosc/2)-$promien;
    $L2  = ($szerokosc/2);
  } 
  else {
   $L1   = $CP1;
   $L2   = $CP2;
  }
  $CP1 = round(($szerokosc/2)-((cos((2 * pi()) * $kat)) * $promien),2);
  $CP2 = round(($szerokosc/2)-((sin((2 * pi()) * $kat)) * $promien),2);
  echo ("  <path stroke="black" stroke-width="3" fill="".$kolory[$p]."" d="");
  echo ("M".$M1.",".$M2." L".$L1.",".$L2." A".$promien.",".$promien.", 0 0,1 ".$CP1.",".$CP2." Z");
  echo (""/>n");
}

echo("</svg>n");

?>

Przy podanych wartościach rysuje piękny wykres z równymi częściami. Zmieńcie jednak wartości w tablicy $dane na np. 5,5,20.

[ Dodano: 24 Cze 2005 09:04 am ]
Poprawka, teraz dopiero przeczytałem post ilr-a, który podsunął mi niezły pomysł. Oto poprawiona pętla:

for ($p=0; $p<count($dane); $p++) {
  $wartosc += $dane[$p];
  $kat = $wartosc / $suma;
  if ($p == 0){
    $L1  = ($szerokosc/2)-$promien;
    $L2  = ($szerokosc/2);
  } 
  else {
   $L1   = $CP1;
   $L2   = $CP2;
  }
  $CP1 = round(($szerokosc/2)-((cos((2 * pi()) * $kat)) * $promien),2);
  $CP2 = round(($szerokosc/2)-((sin((2 * pi()) * $kat)) * $promien),2);
  echo ("  <path w="".$wartosc."" stroke="black" stroke-width="3" fill="".$kolory[$p]."" d="");
  $test = $dane[$p] / $suma;
  if ($test > 0.5){
    echo ("M".$M1.",".$M2." L".$L1.",".$L2." A".$promien.",".$promien.", 0 1,1 ".$CP1.",".$CP2." Z");
  }
  else{
    echo ("M".$M1.",".$M2." L".$L1.",".$L2." A".$promien.",".$promien.", 0 0,1 ".$CP1.",".$CP2." Z");
  }
  echo (""/>n");
}

Dzięki chłopaki za pomoc!!! Wiedziałem, że na Was można liczyć :) A ilr ma u mnie winiacza.

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

8

zgodnie z tym co stwierdziles widac ze

koderem to ja nie jestem  ;)

pierwsze primo: NIE KRYTYKUJE - najwazniejsze ze kod dziala.

ale choc dziala to w oczy pewne rzeczy qjom:
  - $szerokosc/2 powinno byc wyciagniete przed petle jako stala
  - 2*pi() j.w.
  - grzech glowny (: count($dane) w petli... powinno byc j.w. (czyli raz obliczone)
po co tyle nawiasow? np. w:

  $CP1 = round(($szerokosc/2)-((cos((2 * pi()) * $kat)) * $promien),2);

z podstawowki pamientam ze zgodnie z kolejnoscia dzialan wystarczy:

  $CP1 = round($szerokosc/2-cos(2 * pi() * $kat) * $promien,2);

a i nieco czytelniejsze  ;)

drugie primo: gdyby syscy robili takie ladne wciecia jak ty... przyjemnie by sie kod czytalo. TAK CZYMAJ  ;)

[ Dodano: Pią Cze 24, 2005 10:00 ]
btw. CP1 i CP2 mozna przed petla ustalic na odpowiednio M1 - promien i M2
co dodatkowo eliminuje kazdorazowy test: p == 0
i tak jak wczesniej pisalem - miast $szerokosc/2 mozna uzywac stalej - np. wczesniej zdefiniowanej M1

i czy czasem to $szerokosc/2 nie powinno byc zastapione przez $wysokosc/2 (czyli stala $M2) przy obliczaniu $CP2 i $L2?

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

9

Dzięki jellonek za uwagi. Co do nawiasów to najpierw musiałem przełożyć to co było napisane we wzorze, na kod i tak już zostało bo nie chciało mi się poprawiać. A optymalizowanie to kolejny krok - na pewno zastosuję się do rad. Priorytetem było przecież doprowadzenie tego do stanu używalności, ponieważ user nie będzie raczej zaglądał do kodu tylko interesować go będą poprawne wyniki ;)

BTW. Z tego kodu oczywiście można korzystać bez pytania się o zgodę ;)

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

10

ponieważ user nie będzie raczej zaglądał do kodu tylko interesować go będą poprawne wyniki Wink

Gadasz jak Ballmer :)

11

user nie będzie raczej zaglądał do kodu tylko interesować go będą poprawne wyniki

ale i predkosc ich pojawienia sie :)
domyslam sie ze na podstawie tego pliku zrobisz sobie funkcyjke ktora bedzie generowala svg (STATYCZNIE DO PLIKU), z ktorego bedziesz generowal automatycznie gif-a (np. batik-iem)

np. odwolanie do pliku siakis.cgi?q=something.svg.gif powinno sprawdzic czy taki plik istnieje i czy jest nowszy od something.svg i wyswietlic go, a jak oba powyzsze warunki nie sa spelnione, wygenerowac go (batik, inkscape, czy co tam kolwiek z linii polecen) po czym zwymiotowac go (znazy sie zwrocic :)

oczywiscie przydalo by sie wyswietlanie .svg natywne przez przegladarki ktore toto obsluguja, ale takich za wiele nie ma...

jesli chcialbys generowac pod php wykresy (czy siakiekolwiek obrazki) od razu w formie .gif to polecam przyjrzezc sie bibliotece gd

ale przykatowalem :D

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

12

Gadasz jak Ballmer

I też jestem łysy :) Natomiast na tańczenie w stylu Steve'a nie macie co liczyć ;)

domyslam sie ze na podstawie tego pliku zrobisz sobie funkcyjke ktora bedzie generowala svg (STATYCZNIE DO PLIKU), z ktorego bedziesz generowal automatycznie gif-a (np. batik-iem)

Zgadza się do pliku. Natomiast GIF'y nie były przewidziane ponieważ etap generowania zatrzyma się na SVG, które to pliki będą wykorzystywane w miarę potrzeb do dalszej obróbki przeze mnie i innych w programach typu Corel Draw i Adobe Illustrator.

oczywiscie przydalo by sie wyswietlanie .svg natywne przez przegladarki ktore toto obsluguja, ale takich za wiele nie ma...

Wróbelki ćwierkają, że FF 1.1 oraz IE 7 mają mieć natywną obsługę SVG. I nie ma się co dziwić ponieważ SVG to potęga i IMO do niego należy przyszłość.

jesli chcialbys generowac pod php wykresy (czy siakiekolwiek obrazki) od razu w formie .gif to polecam przyjrzezc sie bibliotece gd

Zainteresowałem się już dawno i z powodzeniem wykorzystuję gd do różnych niecnych celów ;)

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

13

Natomiast na tańczenie w stylu Steve'a nie macie co liczyć

Napijemy sie to kto wie ;)

14

Dely: zatańcz jak kolo na Foreverze 8) Cobra dresy załatwi bo ktoś na c64 kupil sobie na wzór tych z Forevera.Co jak co,ale na Silly kręciłeś jakbyś faktycznie z Ballmerem pił ;)

gep/lamers^dial

15

Wróbelki ćwierkają, że FF 1.1 oraz IE 7 mają mieć natywną obsługę SVG. I nie ma się co dziwić ponieważ SVG to potęga i IMO do niego należy przyszłość.

Na razie podstawową obsługę SVG ma Opera.
Gdyby ktoś nie wiedział.

16

dziwne... ale od wiekow mam toto w firefox-ie a fczesniej mialem w mozilli
fakt - z palca kompilowane...

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep