- Questo topic ha 2 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 14 anni, 3 mesi fa da .
-
Topic
-
Ciao a tutti,sto cercando di realizzare un disegno con [tt]TikZ.[/tt] Sto incontrando problemi nel realizzare un arco. Conosco il centro dell’arco, ma in [tt]TikZ[/tt] non sembra esserci modo di tenerne conto. Il centro del raggio non è né sotto, né a sinistra, né a destra, né sopra il punto dove dovrebbe iniziare l’arco. Come fare? Non c’è proprio modo di dire a [tt]TikZ[/tt] dove si trova il centro?
Per ovviare a questo ho provato con questo codice:
`\documentclass[a4paper,11pt,extrafontsizes,twoside,openright]{memoir}\usepackage{etex}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}
\usepackage{microtype}\usepackage{xcolor}
\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{backgrounds}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{intersections}
\usetikzlibrary{positioning}
\usetikzlibrary{shadows}
\usetikzlibrary{shapes}
\usetikzlibrary{through}\tikzstyle{ruota}=[rotate around={\alfa:($(0,0)+(0,\lato/2)$)}]
\tikzstyle{ruota2}=[rotate around={2*\alfa:($(0,0)+(0,\lato/2)$)}]
\tikzstyle{asse}=[-stealth']\pgfarrowsdeclare{freccia45}{freccia45}
{
\pgfmathsetlengthmacro{\rex}{\pgfgetarrowoptions{freccia45}+1.28\pgflinewidth}
\pgfarrowsleftextend{0pt}
\pgfarrowsrightextend{\rex}
}
{
\pgfmathsetlengthmacro{\lun}{\pgfgetarrowoptions{freccia45}/cos(22.5)}
\pgfsetdash{}{+0pt}
\pgfsetmiterjoin
\pgfpathmoveto{\pgfpointadd{\pgfqpoint{\pgfgetarrowoptions{freccia45}}{0pt}}{\pgfqpointpolar{157.5}{\lun}}}
\pgfpathlineto{\pgfqpoint{\pgfgetarrowoptions{freccia45}}{0pt}}
\pgfpathlineto{\pgfpointadd{\pgfqpoint{\pgfgetarrowoptions{freccia45}}{0pt}}{\pgfqpointpolar{-157.5}{\lun}}}
\pgfpathclose
\pgfusepathqstroke
}
\def\miodef{3.5pt} % imposta il valore utilizzato per default
\pgfsetarrowoptions{freccia45}{\miodef} % valore utilizzato se /punta non viene invocato
\pgfkeys{/punta/.default=\miodef, /punta/.code={\pgfsetarrowoptions{freccia45}{#1}}}\tikzstyle{misura}=[dashed,-freccia45]
\tikzstyle{forza}=[very thick,-latex]\definecolor{grigio}{rgb}{.85,.85,.85}
\tikzstyle{quoteBS} = [thin,|-,shorten >=15pt]
\tikzstyle{quoteDA} = [thin,-|,shorten <=15pt] \newcommand{\quota}[3]{\draw [quoteBS] #1 -- ($#1!.5!#2$);% \draw [align=center] ($#1!.5!#2$) node {#3};% \draw [quoteDA] ($#1!.5!#2$) -- #2;% } \newcommand{\quotaVar}[4]{\draw [quoteBS,shorten >=#4pt] #1 — ($#1!.5!#2$);%
\draw [align=center] ($#1!.5!#2$) node {#3};%
\draw [quoteDA,shorten <=#4pt] ($#1!.5!#2$) -- #2;% } %\newlength{\myFm} %\setlength{\myFm}{1cm} \def\myFm{*1cm} \begin{document} \begin{figure} \centering \begin{tikzpicture} %origine \coordinate (O) at (0\myFm,0\myFm); %inferiore e superiore \def\spessore{.5\myFm} \def\lrett{2.5\myFm} \coordinate (inf) at ($(O)+(0\myFm,-\spessore)$); \coordinate (sup) at ($(O)+(0\myFm,\spessore)$); %strato inferiore %raggio, inizio e centro arco inferiore \def\raggioInf{4.5\myFm} \coordinate (InizioInf) at ($(inf)+(-2.5\myFm,0\myFm)$); \coordinate (CentroInf) at ($(inf)+(-2.5\myFm,-\raggioInf)$); \coordinate (estremoArcInfInf) at ($(CentroInf)+(canvas polar cs:angle=125,radius=\raggioInf)$); \coordinate (estremoArcInfSup) at ($(CentroInf)+(canvas polar cs:angle=125,radius=\raggioInf+\spessore)$); %riempimento %arco \pgfpathmoveto{\pgfpoint{-2.5\myFm}{0\myFm}} \pgfpatharc{90}{125}{\raggioInf+\spessore} \pgfpathlineto{\pgfpoint{(-2.5-4.5*sin(35))\myFm}{(4.5*cos(35)-5)\myFm}} \pgfpathlineto{\pgfpoint{-2.5\myFm}{-.5\myFm}} \fill [gray!56]; \pgfpathmoveto{\pgfpoint{-2.5\myFm}{-\spessore}} \pgfpatharc{90}{126}{\raggioInf} \pgfpathlineto{\pgfpoint{-2.5\myFm}{-\spessore}} \fill [white]; %rettangolo \pgfpathmoveto{\pgfpoint{0\myFm}{0\myFm}} \pgfpathlineto{\pgfpoint{-2.55\myFm}{0\myFm}} \pgfpathlineto{\pgfpoint{-2.55\myFm}{-\spessore}} \pgfpathlineto{\pgfpoint{0\myFm}{-\spessore}} \fill [gray!56]; %bordo inferiore \draw (O) -- (inf) -- +(-2.5\myFm,0\myFm) arc (90:125:\raggioInf) -- (estremoArcInfSup); %bordo superiore \draw (inf) -- (O) -- +(-2.5\myFm,0\myFm) arc (90:125:\raggioInf+\spessore) -- (estremoArcInfInf); %strato superiore %raggio, inizio e centro arco superiore \def\raggioSup{4.5\myFm} \coordinate (InizioSup) at ($(sup)+(-2.5\myFm,0\myFm)$); \coordinate (CentroSup) at ($(sup)+(-2.5\myFm,\raggioSup)$); \coordinate (estremoArcSupInf) at ($(CentroSup)+(canvas polar cs:angle=-125,radius=\raggioSup)$); \coordinate (estremoArcSupSup) at ($(CentroSup)+(canvas polar cs:angle=-125,radius=\raggioSup+\spessore)$); %riempimento %arco \pgfpathmoveto{\pgfpoint{-2.5\myFm}{0\myFm}} \pgfpatharc{90}{55}{-\raggioSup-\spessore} \pgfpathlineto{\pgfpoint{(-2.5-4.5*sin(35))\myFm}{(5-4.5*cos(35))\myFm}} \pgfpathlineto{\pgfpoint{-2.5\myFm}{.5\myFm}} \fill [gray!56]; \pgfpathmoveto{\pgfpoint{-2.5\myFm}{\spessore}} \pgfpatharc{90}{54}{-\raggioSup} \pgfpathlineto{\pgfpoint{-2.5\myFm}{\spessore}} \fill [white]; %rettangolo \pgfpathmoveto{\pgfpoint{0\myFm}{0\myFm}} \pgfpathlineto{\pgfpoint{-2.55\myFm}{0\myFm}} \pgfpathlineto{\pgfpoint{-2.55\myFm}{\spessore}} \pgfpathlineto{\pgfpoint{0\myFm}{\spessore}} \fill [gray!56]; %bordo inferiore \draw (sup) -- (O) -- +(-2.5\myFm,0\myFm) arc (90:55:-\raggioInf-\spessore) -- (estremoArcSupSup); %bordo superiore \draw (O) -- (sup) -- +(-2.5\myFm,0\myFm) arc (90:55:-\raggioSup) -- (estremoArcSupSup) -- (estremoArcSupInf); %momento superiore \coordinate (centroMSup) at ($(estremoArcSupInf)!.5!(estremoArcSupSup)+(canvas polar cs:angle=145,radius=.5*\spessore)$); \coordinate (inizioMSup) at ($(centroMSup)+(canvas polar cs:angle=235,radius=.75*\spessore)$); \draw (inizioMSup) -- (centroMSup); \draw [rotate around={235:(centroMSup)},latex'-] (inizioMSup) arc (180:360:.75*\spessore); \end{tikzpicture} \end{figure} \end{document}` però, credo che [tt]TikZ[/tt] sbagli qualcosa nella parte di codice che segue la scritta “%momento superiore”. La rotazione dovrebbe avvenire rispetto a [tt](centroMSup),[/tt] e invece avviene attorno a [tt](inizioMSup).[/tt] ([tt](centroMSup)[/tt] è il centro dell’arco, ed è il punto in alto a destra del segmento unito all’arco che ottenete compilando il codice che ho indicato). Come mai?Grazie mille e ciao,
Marco.
- Devi essere connesso per rispondere a questo topic.