Liverpool

Risposte nei forum create

Stai visualizzando 15 risposte – dal 46 al 60 (di 865 totali)
  • Autore
    Risposte
  • in risposta a: istogramma con pgfplots e CSV #99643
    Liverpool
    Partecipante
      Up
      0
      Down
      ::

      ivan” post=99428In pratica il grafico non deve essere più largo di 160 mm perché deve essere messo ruotato in una pagina alta 180 mm. Ho modificato il tuo codice con width=50cm e composto le etichette in corpo \tiny.

      Allora dovresti usare semplicemente [tt]width=16cm[/tt] e cancellare la riga [tt]x post scale[/tt]. Vedi come viene piccolo!

      ivan” post=99428La cosa mi rincuora.

      Il brutto è che io stesso tendo a dimenticarmelo. Si potrebbe aggiungere automaticamente una riga inutile in fondo alla tabella, per evitare di farlo a mano.

      ivan” post=99428Nel frattempo mi è sorta un’altra curiosità. Poniamo di voler scrivere le x e le y non dentro le barre ma appena sotto, più vicine ai numeri.
      Se scrivo
      `\path [anchor=base,yshift=-1mm]`
      me le sposta in basso di 1mm. Ma se metto -2mm non le vedo più…

      Il motivo te l’ha spiegato @cfiandra. Aggiungi l’opzione
      `clip=false` all’ambiente axis.

      in risposta a: istogramma con pgfplots e CSV #99640
      Liverpool
      Partecipante
        Up
        0
        Down
        ::


        Prova questo codice:
        `% !TEX TS-program = XeLaTeX
        \documentclass{standalone}

        \usepackage{mathspec}
        \setprimaryfont[Numbers={Proportional},Scale=MatchLowercase]{Junicode}

        \usepackage{pgfplotstable}
        \pgfplotsset{compat=1.11}
        \pgfplotstableset{col sep=comma}

        % ho rimosso la tabella per sintesi
        \pgfplotstableread{chart.csv}\loadedtable

        % memorizza il numero di righe della tabella
        \pgfplotstablegetrowsof{\loadedtable}
        \pgfmathsetmacro{\nrighe}{\pgfplotsretval-1}

        % contiene gli indici degli elementi non nulli della colonna a
        \newcommand{\extraindici}{%
        \foreach \i in {0,…,\nrighe} {%
        \pgfplotstablegetelem{\i}{a}\of\loadedtable%
        \ifnum\pgfplotsretval>0
        \i,%
        \fi%
        }%
        \pgfmathparse{int(\nrighe)}%
        \pgfmathresult%
        }

        % contiene le etichette degli elementi non nulli della colonna a
        \newcommand{\extravalori}{%
        \foreach \i in {0,…,\nrighe} {%
        \pgfplotstablegetelem{\i}{a}\of\loadedtable%
        \ifnum\pgfplotsretval>0
        \pgfplotsretval,%
        \fi%
        }%
        }

        \begin{document}
        \begin{tikzpicture}
        \begin{axis} [
        ybar,
        ybar interval,
        width=140mm,
        x post scale=10,
        axis x line*=bottom,
        axis y line=left,
        grid=none,
        xmin=0,
        xmax=\nrighe,
        ymin=20,
        ymax=52,
        xlabel=Pages and quires,
        xlabel style={font=\bfseries},
        xtick={0,2,…,\nrighe},
        xtick pos=left,
        xticklabels={119,…,200},
        xticklabel style={rotate=90},
        extra x ticks={0,16,32,36,52,68,84,100,116,132,141},
        extra x tick labels={1,2,4,5,6,7,8,9,10,11},
        extra x tick style={
        major tick length=1.5cm,
        every major tick/.append style=ultra thick,
        xticklabel style={rotate=-90, yshift=5mm}
        },
        ]
        \addplot+ [fill=gray!50, draw=gray]
        table [x expr=\coordindex, y expr=\thisrow{c}] {\loadedtable};
        \pgfplotsinvokeforeach {0,2,…,\nrighe} {
        \path [anchor=base] node at (#1+0.5,21) {x}
        node at (#1+1.5,21) {y};
        }
        \end{axis}
        \end{tikzpicture}
        \end{document}`
        Come avrai visto, ho creato due comandi che generano le liste da usare per le tacche supplementari, ma non sono riuscito a usarli perché ottengo degli errori. Se mostro la lista in un pdf e la copio nel codice va tutto bene, ma se scrivo il nome del comando ottengo degli errori. Se qualcuno è in grado di risolvere il problema, fa un piacere anche a me.

        Non hai pensato di usare due colori differenti per la x e la y e di aggiungere una legenda?

        ivan” post=99402Il grafico dovrà andare (in verticale) in una gabbia alta (circa 150 mm). Non è fondamentale la lettura di ogni singola barra. Piuttosto serve vedere l’andamento complessivo.

        Questo non l’ho capito: la larghezza del grafico deve essere inferiore a 15 cm e vuoi metterci 140 barre. Quindi, tolto lo spazio riservato alle etichette rimane circa 1 mm a barra! Come fai poi a inserire in 2 mm le etichette in corpo [tt]\LARGE[/tt]? 😕
        Quando dici “serve vedere l’andamento complessivo” intendi dire che vorresti ridurre il numero di dati scegliendo delle opportune righe dalla tabella oppure che non importa mettere tutte le etichette?

        ivan” post=99402Tra l’altro non riesco a capire come mai se non metto l’ultima riga della tabella, l’ultima barra non viene disegnata.

        Questo è un comportamento noto del pacchetto, anche se è veramente insulso.

        Ciao

        in risposta a: Confrontare il valore assoluto di un numero reale #99677
        Liverpool
        Partecipante
          Up
          0
          Down
          ::


          Grazie. Ho letto a suo tempo sia la guida GuIT (per prima), sia il manuale di etex. Il problema è nato dal fatto che il numero da confrontare è memorizzato in una macro di pgf e per questo volevo usare [tt]\numexpr[/tt] al posto di [tt]\dimexpr[/tt] seppure con [tt]\ifdim[/tt] per il confronto tra numeri reali. Vorrà dire che valuterò se sia più conveniente caricare il numero in una dimensione oppure utilizzare due [tt]\ifdim[/tt] annidati per i due valori opposti.

          Ciao

          in risposta a: istogramma con pgfplots e CSV #99638
          Liverpool
          Partecipante
            Up
            0
            Down
            ::


            Parti da questo codice (parziale):
            `\pgfplotstableread{chart.csv}\loadedtable

            % riscrive la colonna b cancellando le righe dispari
            \pgfplotstablemodifyeachcolumnelement{b}\of\loadedtable\as\cell{%
            \edef\cell{\ifodd\pgfplotstablerow\else\cell\fi}}

            \begin{document}
            \begin{tikzpicture}
            \begin{axis} [
            x post scale=10,
            y post scale=2,
            ybar,
            ybar interval, % <-- non accetta valori bar width=10pt, xmin=0, ymin=0, ymax=52, % <-- era 50 xtick pos=left, xticklabels from table={\loadedtable}{b}, x tick label style={rotate=90,anchor=east}, ] \addplot+ [draw=none] table [x expr=\coordindex, y expr=\thisrow{c}, col sep=semicolon]{\loadedtable}; \end{axis} \end{tikzpicture} \end{document}`

            ivan” post=993263) Si dovrebbe riportare in qualche modo le undici lettere della colonna a
            sotto le etichette della colonna b, segnando la posizione con un filetto un po’ più spesso.

            Non ho capito cosa vuoi fare. Per sotto le etichette intendi “sotto scritte in orizzontale” oppure, considerando che le etichette sono ruotate, “a destra in verticale”? E poi cos’è quel filetto di cui parli?

            ivan” post=993264) Migliorare il grafico, per esempio eliminando il contorno delle barre, diminuire il corpo delle etichette.

            Il corpo delle etichette si può ridurre, ad esempio con`ticklabel style={font=\footnotesize},`ma a me sembrano già piccole così.

            Ciao

            in risposta a: Le mie (dis)avventure con TikZ #96814
            Liverpool
            Partecipante
              Up
              0
              Down
              ::

              lorenzo.pantieri” post=99265Mancano le indicazioni (i numeri!) sopra le barre.

              Aggiungi l’opzione [tt]nodes near coords[/tt].

              in risposta a: Le mie (dis)avventure con TikZ #96812
              Liverpool
              Partecipante
                Up
                0
                Down
                ::

                lorenzo.pantieri” post=99247Le etichette oblique sono un po’ pallide, inoltre.

                Sul mio schermo le etichette oblique non sono affatto pallide. Se campiono il colore, mi dice RGB=(0,0,0) perciò sono nere. Che sia un problema del tuo visualizzatore oppure un effetto ottico?

                in risposta a: Le mie (dis)avventure con TikZ #96805
                Liverpool
                Partecipante
                  Up
                  0
                  Down
                  ::

                  lorenzo.pantieri” post=99236In ogni caso, in mancanzi di altri input lascio \div, come nel grafico che ha prodotto Liverpool.

                  Lascia [tt]\div[/tt] e spiega che con il simbolo [tt]\div[/tt] vuoi indicare tutti i numeri interi compresi tra i due che lo circondano. Hai mai pensato di realizzare una tabella dei simboli all’inizio di ogni dispensa?


                  @OldClaudio
                  , secondo Wikipedia la notazione più diffusa sarebbe \( [a..b] \), ma francamente mi sembra solo un’opinione personale. Altra notazione, che però ha il difetto di non essere compatta, è \( \{a,…,b\} \).

                  in risposta a: Le mie (dis)avventure con TikZ #96802
                  Liverpool
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    Non c’è sufficiente spazio per inserire quelle etichette in modo non ambiguo in un grafico che occupa metà pagina, perciò ti consiglio di inclinarle:
                    `\begin{tikzpicture}[font=\small]
                    \begin{axis}[ybar,ymin=0,ymax=17,%enlargelimits,
                    height=6.5cm,
                    ymajorgrids=true,
                    xlabel={Altezza in cm},
                    ylabel={Numero di alunni},
                    symbolic x coords={
                    $150\div154$, $155\div159$, $160\div164$, $165\div169$,
                    $170\div174$, $175\div179$, $180\div184$, $185\div189$},
                    xtick=data, nodes near coords,
                    nodes near coords align={vertical},
                    xticklabel style={rotate=45, anchor=18},
                    xtick pos=left]
                    \addplot [fill=cyan,draw=black] coordinates{
                    ($150\div154$,3) ($155\div159$,6) ($160\div164$,9) ($165\div169$,15)
                    ($170\div174$,12) ($175\div179$,6) ($180\div184$,6) ($185\div189$,3)};
                    \end{axis}
                    \end{tikzpicture}`

                    [attachment=1241]prova_2015-01-12.png[/attachment]

                    Per fare quello che vuoi tu basta inserire l’opzione [tt]xticklabel style={text width=1cm}[/tt], ma anche riducendo la dimensione del font, le etichette si confondono con le successive.

                    Tirata d’orecchi: ti è stato più volte “intimato” di aggiungere nel preambolo `\pgfplotsset{compat=1.11}`
                    Ora puoi capire la fondatezza di quel consiglio. Prova a compilare il codice che ti ho dato. Vedrai che l’etichetta dell’asse y è inutilmente lontana dal grafico e quella dell’asse x si sovrappone alle etichette delle tacche. Come mai? Perché nella versione 1.3, che è quella usata per default, la gestione delle etichette era sbagliata insieme a cento altre cose.
                    Ora il consiglio è sempre lo stesso, ma ti invito a ricontrollare tutti i grafici per individuare eventuali comportamenti differenti da quelli che vuoi tu (motivo per il quale sul manuale del pacchetto è sconsigliato di usare il valore [tt]newest[/tt]).

                    Ciao

                    Attachments:
                    You must be logged in to view attached files.
                    in risposta a: Formati immagine: funzionano solo PDF e JPEG #99559
                    Liverpool
                    Partecipante
                      Up
                      0
                      Down
                      ::


                      Ho letto rapidamente il manuale di [tt]bmpsize[/tt] e non mi sembra che ci sia scritto che permette di estendere i formati di file d’immagine compatibili rispetto ai predefiniti ma, da quello che ho capito, dice che, se stai usando un driver che permette di leggere i file bitmap, allora il pacchetto fa in modo che il pacchetto [tt]graphicx[/tt] sia in grado di riconoscerne le dimensioni (e questo ne giustifica anche il nome). Ciò premesso, non mi sembra che il driver [tt]pdftex[/tt] sia in grado di leggere i file bitmap.

                      Quello che dice l’Arte è ambiguo e, se la mia interpretazione è corretta, sbagliato. E’ vero, come dice Lorenzo, che si parla in generale di LaTeX e quindi non in particolare di pdflatex; ma afferma che il pacchetto [tt]bmpsize[/tt] permette di inserire anche altri formati di immagine e invece la funzione del pacchetto è un’altra. Inoltre nel par. 2.1 si afferma “In questa guida con LaTeX s’intende sempre il programma pdflatex”, perciò la precisazione fatta in quella frase cadrebbe nel vuoto.

                      Ripeto che non ho alcuna certezza di quanto ho appena scritto, perché ho letto tutto velocemente, perciò se mi sbaglio chiedo scusa agli autori della guida.

                      Per quanto riguarda l’eps, hai detto di usare MiKTeX e se non sbaglio la gestione diretta degli eps è supportata solo da TeXlive e MacTex. che è la distribuzione di cui parla l’Arte e che assume per installata nel resto della guida.

                      Riguardo all’inclusione di un bitmap in un pdf, lo sconsiglierei anche se fosse possibile per motivi di dimensioni del documento. Ricorda che anche le macchine fotografiche professionali salvano le immagini in RAW oppure in jpeg…

                      Ciao

                      in risposta a: Le mie (dis)avventure con TikZ #96797
                      Liverpool
                      Partecipante
                        Up
                        0
                        Down
                        ::

                        lorenzo.pantieri” post=99180http://www.lorenzopantieri.net/Matematica_files/Prima.pdf

                        Ecco un altro problemino con pgf-pie (che peraltro mi piace moltissimo: sintassi facile e risoltati gradevoli!): i numeri che esprimono le percentuali all’interno delle fette (prodotti in automatico dal programma) non sono in modo matematico: la differenza (pagina 6 e 8) è evidentissima, e sta male. Come rimediare? Basta anche una soluzione sporchissima: ho messo il .sty (non compreso nella mia MacTeX2013) nella cartella di lavoro, per cui potrei anche intervenire su quello…

                        Aggiungi tra le opzioni
                        `before number=$, after number=\%$`

                        in risposta a: Le mie (dis)avventure con TikZ #96785
                        Liverpool
                        Partecipante
                          Up
                          0
                          Down
                          ::

                          lorenzo.pantieri” post=99087Circa le frecce nei prodotti notevoli, il codice di Liverpool mi sballa tutta l’impaginazione.

                          Ho dimenticato di dirti che bisogna compilare due volte. Questo è il problema?

                          in risposta a: Disegnare archi su una sfera e marcare i punti #98198
                          Liverpool
                          Partecipante
                            Up
                            0
                            Down
                            ::

                            OldClaudio” post=99081Faccio tesoro del tuo codice, e se qualcuno aggiusta il piccolo baco che ancora resta, tanto meglio.

                            Problema risolto con la chiave [tt]disabledatascaling[/tt]. Ho aggiornato entrambi i codici e ho semplificato la formula che dà la latitudine del cursore in funzione della longitudine, passando alle funzioni iperboliche. Ovviamente è possibile ricavare anche la longitudine in funzione della latitudine, ma dal punto di vista grafico servono più campioni per avere una curvatura dolce (perché l’elica si arrotola intorno ai poli ed è preferibile avere più nodi equidistanti in longitudine piuttosto che in latitudine), perciò ho scelto questa versione.

                            in risposta a: Disegnare archi su una sfera e marcare i punti #98196
                            Liverpool
                            Partecipante
                              Up
                              0
                              Down
                              ::

                              OldClaudio” post=98957Visto che l’appetito vie mangiando, saresti anche capace di disegnare una lossodromia fra due punti dati?

                              Forse siamo un po’ OT e per questo chiedo scusa a @Squall. Questo regalo è tutto per @OldClaudio.
                              Allo stesso modo dell’ortodromia ho definito un pic [tt]lossodromia[/tt] che genera la curva lossodromica tra due punti assegnati sulla sfera. Il codice usa solo i comandi di TikZ, ma per disegnare la sfera mi sono appoggiato a pgfplots, che non è necessario. Il pic utilizza l’istruzione [tt]plot[/tt] di TikZ con i valori di default (25 campioni), ma è possibile passare al comando le opzioni [tt]smooth[/tt], [tt]hobby[/tt] oppure [tt]samples=[/tt] per migliorare le caratteristiche del tratto. Non l’ho fatto a priori per non appesantire il risultato quando non è necessario.
                              Il cuore è il comando:
                              `\pic [partenza={latitudine A}{longitudine A}, arrivo={latitudine B}{longitudine B}] {lossodromia};`
                              nel quale, come di consueto, la latitudine 0 corrisponde al piano [xy] e la longitudine 0 al semipiano [xz] di ascisse positive. La latitudine va da -90 al polo sud a 90 al polo nord; la longitudine va da -180 (ovest) a 180 (est). Non è possibile scegliere come punto di partenza o di arrivo uno dei due poli, ma è possibile prendere un punto di latitudine molto vicina (ad esempio 89.99°). Non è nemmeno possibile prendere due punti sullo stesso meridiano, ma in tal caso la lossodromia coincide con l’ortodromia e si può usare quel codice. Volendo si può pensare di affinare il codice per includere questi casi particolari.
                              Anche qui è possibile utilizzare la chiave [tt]raggio[/tt] che è un alias per la chiave [tt]scale[/tt] e accetta solo numeri adimensionali che vengono interpretati come fattore di scala della lunghezza del versore dell’asse delle ascisse.
                              Se le coordinate vengono inserite correttamente, il codice disegna il più breve tra tutti i tratti possibili. In alternativa, si può usare l’opzione [tt]demo[/tt]: in tal caso il codice disegna la curva che passa per i due punti e per tutti i punti di longitudine intermedia. Per fare un esempio: se la longitudine del punto di partenza è -178 e quella del punto di arrivo è 178, di default il codice disegna la curva che si estende su soli 4° di longitudine, mentre con l’opzione [tt]demo[/tt] disegna la curva che si estende su 356° di longitudine, passando per il meridiano di Greenwich.

                              `\documentclass

                              {standalone}
                              \usepackage{pgfplots}
                              \pgfplotsset{compat=1.11}

                              % componenti dei versori degli assi coordinati
                              % rispetto alla base della tela
                              \pgfmathsetlengthmacro{\xx}{-2cm*sqrt(3)/2}
                              \pgfmathsetlengthmacro{\xy}{-1cm}
                              \pgfmathsetlengthmacro{\yx}{2cm*sqrt(3)/2}
                              \pgfmathsetlengthmacro{\yy}{-1cm}
                              \pgfmathsetlengthmacro{\zx}{0cm}
                              \pgfmathsetlengthmacro{\zy}{2cm}

                              \tikzset{
                              latA/.initial=0,
                              lonA/.initial=0,
                              latB/.initial=0,
                              lonB/.initial=0,
                              partenza/.style 2 args={latA=#1, lonA=#2},
                              arrivo/.style 2 args={latB=#1, lonB=#2},
                              posizione/.style 2 args={latA=#1, lonA=#2},
                              raggio/.initial=1,
                              raggio/.code={\tikzset{/tikz/scale=#1}},
                              /lossodromia/esteso/.initial=1,
                              demo/.code={\tikzset{/lossodromia/esteso=0}},
                              declare function={
                              s(\x) = ln( (sin(\x)+1)/cos(\x) );
                              S(\x) = \m*(\x-\lonA) + s(\latA);
                              % s e S sono due espressioni della stessa funzione
                              },
                              lossodromia/.pic={
                              % riferimento http://homepages-fb.thm.de/boergens/marken/marke062/marke062_loxo.pdf
                              \pgfmathsetmacro{\latA}{\pgfkeysvalueof{/tikz/latA}}
                              \pgfmathsetmacro{\lonA}{\pgfkeysvalueof{/tikz/lonA}}
                              \pgfmathsetmacro{\latB}{\pgfkeysvalueof{/tikz/latB}}
                              \pgfmathsetmacro{\lonB}{\pgfkeysvalueof{/tikz/lonB}}
                              \pgfmathparse{\lonB-\lonA>180 && \pgfkeysvalueof{/lossodromia/esteso}==1 ? 360 : 0}
                              \pgfmathsetmacro{\lonB}{\lonB – \pgfmathresult}
                              \pgfmathparse{\lonA-\lonB>180 && \pgfkeysvalueof{/lossodromia/esteso}==1 ? 360 : 0}
                              \pgfmathsetmacro{\lonA}{\lonA – \pgfmathresult}
                              \pgfmathsetmacro{\m}{(s(\latB)-s(\latA)) / (\lonB-\lonA)}
                              \draw [variable=\t, domain=\lonA:\lonB, pic actions]
                              plot ({cos(\t)/cosh(S(\t))}, {sin(\t)/cosh(S(\t))}, {tanh(S(\t))});
                              },
                              coordinata/.pic={
                              \pgftransformshift{
                              \pgfpointspherical{90-\pgfkeysvalueof{/tikz/lonA}}{\pgfkeysvalueof{/tikz/latA}}{1}
                              }
                              \pgfnode{coordinate}{center}{}{#1}{}
                              }
                              }

                              \begin{document}
                              \begin{tikzpicture}
                              \begin{axis} [x={(\xx,\xy)}, y={(\yx,\yy)}, z={(\zx,\zy)},
                              anchor=origin, at={(0,0)}, disabledatascaling, hide axis]
                              % disegna i meridiani e i paralleli
                              \addplot3 [surf, z buffer=sort, fill opacity=0.6, white, faceted color=blue!40,
                              samples=19, samples y=37, variable=\u, variable y=\v,
                              domain=0:180, y domain=0:360]
                              ({cos(u)*sin(v)}, {sin(u)*sin(v)}, {cos(v)});
                              % disegna il contorno della sfera
                              \draw [blue!40] (0,0,0) circle ({2cm*sqrt(3/2)});
                              % disegna la lossodromia
                              \pic [partenza={-10}{20}, arrivo={89.99}{360}, smooth, samples=50, demo, red] {lossodromia};
                              % definisce le coordinate dei punti di partenza e arrivo
                              \pic [posizione={-10}{20}] {coordinata=A};
                              \pic [posizione={89.99}{360}] {coordinata=B};
                              % traccia i pallini in corrispondenza degli estremi della curva
                              \fill (A) circle (1pt)
                              (B) circle (1pt);
                              % disegna gli assi coordinati
                              \draw [-latex] (1,0,0) — (1.5,0,0);
                              \draw [-latex] (0,1,0) — (0,1.5,0);
                              \draw [-latex] (0,0,1) — (0,0,1.5);
                              \end{axis}
                              \end{tikzpicture}
                              \end{document}`

                              [attachment=1239]lossodromia.jpg[/attachment]

                              Il codice, come anche quello dell’ortodromia, al momento presenta un bug: quando usato all’interno dell’ambiente [tt]axis[/tt] di pgfplots per disegnare la sfera passando come opzioni i versori degli assi coordinati, i pallini (e nel caso dell’ortodromia la curva) potrebbero essere tracciati fuori asse per alcune combinazioni di assi coordinati. Il problema nasce dal fatto che il sistema di riferimento viene specificato due volte: una per l’ambiente [tt]axis[/tt] e l’altra per i pic. Se qualcuno mi aiuta a risolverlo, gli sono grato.

                              Ciao

                              Edit: bug risolto con la chiave [tt]disabledatascaling[/tt]. Ho aggiornato conseguentemente il codice.

                              Attachments:
                              You must be logged in to view attached files.
                              in risposta a: Disegnare archi su una sfera e marcare i punti #98195
                              Liverpool
                              Partecipante
                                Up
                                0
                                Down
                                ::

                                OldClaudio” post=98957Visto che l’appetito vie mangiando, saresti anche capace di disegnare una lossodromia fra due punti dati?

                                Forse siamo un po’ OT e per questo chiedo scusa a @Squall. Questo regalo è tutto per @OldClaudio.
                                Allo stesso modo dell’ortodromia ho definito un pic [tt]lossodromia[/tt] che genera la curva lossodromica tra due punti assegnati sulla sfera. Il codice usa solo i comandi di TikZ, ma per disegnare la sfera mi sono appoggiato a pgfplots, che non è necessario. Il pic utilizza l’istruzione [tt]plot[/tt] di TikZ con i valori di default (25 campioni), ma è possibile passare al comando le opzioni [tt]smooth[/tt], [tt]hobby[/tt] oppure [tt]samples=[/tt] per migliorare le caratteristiche del tratto. Non l’ho fatto a priori per non appesantire il risultato quando non è necessario. La curva sembra funzionare correttamente. Forse le formule si potrebbero semplificare un po’ ma per il momento va bene così.
                                Il cuore è il comando:
                                `\pic [partenza={latitudine A}{longitudine A}, arrivo={latitudine B}{longitudine B}] {lossodromia};`
                                nel quale, come di consueto, la latitudine 0 corrisponde al piano [xy] e la longitudine 0 al semipiano [xz] di ascisse positive. Non è possibile scegliere come punto di partenza o di arrivo uno dei due poli, ma è possibile prendere un punto di latitudine molto vicina (ad esempio 89.98°). Non è nemmeno possibile prendere due punti sullo stesso meridiano, ma in tal caso la lossodromia coincide con l’ortodromia e si può usare quel codice. Volendo si può pensare di affinare il codice per includere questi casi particolari.
                                Anche qui è possibile utilizzare la chiave [tt]raggio[/tt] che è un alias per la chiave [tt]scale[/tt] e accetta solo numeri adimensionali che vengono interpretati come fattore di scala della lunghezza del versore dell’asse delle ascisse.
                                `\documentclass

                                {standalone}
                                \usepackage{pgfplots}
                                \pgfplotsset{compat=1.11}

                                % componenti dei versori degli assi coordinati
                                % rispetto alla base della tela
                                \pgfmathsetlengthmacro{\xx}{-2cm*sqrt(3)/2}
                                \pgfmathsetlengthmacro{\xy}{-1cm}
                                \pgfmathsetlengthmacro{\yx}{2cm*sqrt(3)/2}
                                \pgfmathsetlengthmacro{\yy}{-1cm}
                                \pgfmathsetlengthmacro{\zx}{0cm}
                                \pgfmathsetlengthmacro{\zy}{2cm}

                                \tikzset{
                                latA/.initial=0,
                                lonA/.initial=0,
                                latB/.initial=0,
                                lonB/.initial=0,
                                partenza/.style 2 args={latA=#1, lonA=#2},
                                arrivo/.style 2 args={latB=#1, lonB=#2},
                                posizione/.style 2 args={latA=#1, lonA=#2},
                                raggio/.initial=1,
                                raggio/.code={\tikzset{/tikz/scale=#1}},
                                declare function={
                                s(\x) = ln( (1+tan(\x/2)) / (1-tan(\x/2))) );
                                lat(\x) = 2*atan( tanh( (\m*(\x-\lonA) + s(\latA))/2) ) );
                                },
                                lossodromia/.pic={
                                % riferimento http://homepages-fb.thm.de/boergens/marken/marke062/marke062_loxo.pdf
                                \pgfmathsetmacro{\latA}{\pgfkeysvalueof{/tikz/latA}}
                                \pgfmathsetmacro{\lonA}{\pgfkeysvalueof{/tikz/lonA}}
                                \pgfmathsetmacro{\latB}{\pgfkeysvalueof{/tikz/latB}}
                                \pgfmathsetmacro{\lonB}{\pgfkeysvalueof{/tikz/lonB}}
                                \pgfmathsetmacro{\m}{(s(\latB)-s(\latA)) / (\lonB-\lonA)}
                                \draw [variable=\t, domain=\lonA:\lonB, pic actions]
                                plot (
                                {abs(\t)!=90 ? cos(\t)*cos(lat(\t)) : 0},
                                {abs(\t)!=90 ? sin(\t)*cos(lat(\t)) : 0},
                                {abs(\t)!=90 ? sin(lat(\t)) : sin(\t)});
                                },
                                coordinata/.pic={
                                \pgftransformshift{
                                \pgfpointspherical{90-\pgfkeysvalueof{/tikz/lonA}}{\pgfkeysvalueof{/tikz/latA}}{1}
                                }
                                \pgfnode{coordinate}{center}{}{#1}{}
                                }
                                }

                                \begin{document}
                                \begin{tikzpicture}
                                \begin{axis} [x={(\xx,\xy)}, y={(\yx,\yy)}, z={(\zx,\zy)}, hide axis]
                                % disegna i meridiani e i paralleli
                                \addplot3 [surf, z buffer=sort, fill opacity=0.6, white, faceted color=blue!40,
                                samples=19, samples y=37, variable=\u, variable y=\v,
                                domain=0:180, y domain=0:360]
                                ({cos(u)*sin(v)}, {sin(u)*sin(v)}, {cos(v)});
                                % disegna il contorno della sfera
                                \draw [blue!40] (0,0,0) circle ({2cm/cos(atan(1/sqrt(2)))});
                                % disegna la lossodromia
                                \pic [partenza={-10}{20}, arrivo={89.98}{360}, smooth, samples=50, red] {lossodromia};
                                % definisce le coordinate dei punti di partenza e arrivo
                                \pic [posizione={-10}{20}, x={(\xx,\xy)}, y={(\yx,\yy)}, z={(\zx,\zy)}] {coordinata=A};
                                \pic [posizione={89.98}{360}, x={(\xx,\xy)}, y={(\yx,\yy)}, z={(\zx,\zy)}] {coordinata=B};
                                % traccia i pallini in corrispondenza degli estremi della curva
                                \fill (A) circle (1pt)
                                (B) circle (1pt);
                                % disegna gli assi coordinati
                                \draw [-latex] (1,0,0) — (1.5,0,0);
                                \draw [-latex] (0,1,0) — (0,1.5,0);
                                \draw [-latex] (0,0,1) — (0,0,1.5);
                                \end{axis}
                                \end{tikzpicture}
                                \end{document}`

                                [attachment]C:\fakepath\lossodromia.png[/attachment]

                                Il codice, come anche quello dell’ortodromia, al momento presenta un bug: quando usato all’interno dell’ambiente [tt]axis[/tt] di pgfplots per disegnare la sfera passando come opzioni i versori degli assi coordinati, i pallini (e nel caso dell’ortodromia la curva), potrebbero essere tracciati fuori asse per alcune combinazioni di assi coordinati. Il problema nasce dal fatto che il sistema di riferimento viene specificato due volte: una per l’ambiente [tt]axis[/tt] e l’altra per i pic. Se qualcuno mi aiuta a risolverlo, gli sono grato.

                                Ciao

                                in risposta a: Disegnare archi su una sfera e marcare i punti #98193
                                Liverpool
                                Partecipante
                                  Up
                                  0
                                  Down
                                  ::

                                  OldClaudio” post=98972Disegnando anche i paralleli, cosa che ritengo utilissima, il disegno risulta un po’ confuso se si vedono le linee sul retro della sfera; lo so che è difficile, ma si possono elininare gli archi posteriori di meridiani e paralleli?

                                  Tratteggiare o nascondere le parti visibili non è banale, soprattutto se si vuole realizzare una soluzione che vada bene con qualunque sistema di riferimento (leggi proiezione). In tal caso, magari per pigrizia, credo che la soluzione più semplice sia appoggiarsi all’opzione [tt]surf[/tt] di pgfplots per disegnare la sfera. Lo svantaggio è che gli archi saranno solo approssimati sul reticolo.
                                  `\documentclass

                                  {standalone}
                                  \usepackage{pgfplots}
                                  \pgfplotsset{compat=1.11}

                                  % componenti dei versori degli assi coordinati
                                  % rispetto alla base della tela
                                  \pgfmathsetlengthmacro{\xx}{-1cm*sqrt(3)/2}
                                  \pgfmathsetlengthmacro{\xy}{-0.5cm}
                                  \pgfmathsetlengthmacro{\yx}{1cm*sqrt(3)/2}
                                  \pgfmathsetlengthmacro{\yy}{-0.5cm}
                                  \pgfmathsetlengthmacro{\zx}{0cm}
                                  \pgfmathsetlengthmacro{\zy}{1cm}

                                  \tikzset{
                                  latA/.initial=0,
                                  lonA/.initial=0,
                                  latB/.initial=0,
                                  lonB/.initial=0,
                                  partenza/.style 2 args={latA=#1, lonA=#2},
                                  arrivo/.style 2 args={latB=#1, lonB=#2},
                                  posizione/.style 2 args={latA=#1, lonA=#2},
                                  raggio/.initial=1,
                                  raggio/.code={\tikzset{/tikz/scale=#1}},
                                  lungo/.initial=0,
                                  opposto/.code={\tikzset{/tikz/lungo=1}},
                                  ortodromia/.pic={
                                  % conversione delle coordinate geografiche in cartesiane
                                  \pgfmathsetmacro{\Ax}{cos(\pgfkeysvalueof{/tikz/latA})*cos(\pgfkeysvalueof{/tikz/lonA})}
                                  \pgfmathsetmacro{\Ay}{cos(\pgfkeysvalueof{/tikz/latA})*sin(\pgfkeysvalueof{/tikz/lonA})}
                                  \pgfmathsetmacro{\Az}{sin(\pgfkeysvalueof{/tikz/latA})}
                                  \pgfmathsetmacro{\Bx}{cos(\pgfkeysvalueof{/tikz/latB})*cos(\pgfkeysvalueof{/tikz/lonB})}
                                  \pgfmathsetmacro{\By}{cos(\pgfkeysvalueof{/tikz/latB})*sin(\pgfkeysvalueof{/tikz/lonB})}
                                  \pgfmathsetmacro{\Bz}{sin(\pgfkeysvalueof{/tikz/latB})}
                                  % prodotto scalare (OA\cdot OB)
                                  \pgfmathsetmacro{\ps}{\Ax*\Bx + \Ay*\By + \Az*\Bz}
                                  % vettore OP complanare con OA e OB e ortogonale al primo
                                  \pgfmathsetmacro{\Px}{-\Ax*\ps + \Bx}
                                  \pgfmathsetmacro{\Py}{-\Ay*\ps + \By}
                                  \pgfmathsetmacro{\Pz}{-\Az*\ps + \Bz}
                                  % versore CP parallelo a OP
                                  \pgfmathsetmacro{\Cx}{\Px/sqrt((\Px)^2 + (\Py)^2 + (\Pz)^2)}
                                  \pgfmathsetmacro{\Cy}{\Py/sqrt((\Px)^2 + (\Py)^2 + (\Pz)^2)}
                                  \pgfmathsetmacro{\Cz}{\Pz/sqrt((\Px)^2 + (\Py)^2 + (\Pz)^2)}
                                  % angolo tra i due vettori OA e OB
                                  \pgfmathsetmacro{\angolo}{acos(\ps)-360*\pgfkeysvalueof{/tikz/lungo}}
                                  \draw [x={(\Ax*\xx+\Ay*\yx+\Az*\zx, \Ax*\xy+\Ay*\yy+\Az*\zy)},
                                  y={(\Cx*\xx+\Cy*\yx+\Cz*\zx, \Cx*\xy+\Cy*\yy+\Cz*\zy)}, pic actions]
                                  (1,0,0) arc (0:\angolo:1);
                                  },
                                  coordinata/.pic={
                                  \pgftransformshift{
                                  \pgfpointspherical{90-\pgfkeysvalueof{/tikz/lonA}}{\pgfkeysvalueof{/tikz/latA}}{1}
                                  }
                                  \pgfnode{coordinate}{center}{}{#1}{}
                                  }
                                  }

                                  \begin{document}
                                  \begin{tikzpicture}
                                  \begin{axis} [x={(\xx,\xy)}, y={(\yx,\yy)}, z={(\zx,\zy)},
                                  anchor=origin, at={(0,0)}, disabledatascaling, hide axis]
                                  % disegna la sfera con i meridiani e paralleli
                                  \addplot3 [surf, z buffer=sort, fill opacity=0.6, white, faceted color=blue!40, very thin,
                                  samples=19, samples y=37, variable=\u, variable y=\v,
                                  domain=0:180, y domain=0:360]
                                  ({cos(u)*sin(v)}, {sin(u)*sin(v)}, {cos(v)});
                                  % disegna l'arco
                                  \pic [partenza={30}{-50}, arrivo={30}{90}, red] {ortodromia};
                                  \pic [posizione={30}{-50}] {coordinata=A};
                                  \pic [posizione={30}{90}] {coordinata=B};
                                  \fill (A) circle (0.8pt)
                                  (B) circle (0.8pt);
                                  % assi coordinati
                                  \draw [-latex] (1,0,0) — (2,0,0);
                                  \draw [-latex] (0,1,0) — (0,2,0);
                                  \draw [-latex] (0,0,1) — (0,0,2);
                                  \end{axis}
                                  \end{tikzpicture}
                                  \end{document}`

                                  [attachment=1234]ortodromia1.png[/attachment]

                                  Attachments:
                                  You must be logged in to view attached files.
                                Stai visualizzando 15 risposte – dal 46 al 60 (di 865 totali)

                                Go to top