von Patrick1990 » Mo 4. Dez 2023, 21:11
Hier mit pic. Ich musste einiges ändern. Scheinbar klappt pic in Verbindung mit meinen vorherigen Koordinatenberechnungen über pgfmathsetmacro nicht so.
Für mich sieht es so aus, als läge da eine Berechnungsungenauigkeit vor bei meinen Radien.
Diese werden mittels \radiusOHL berechnet. Kann man die Genauigkeit erhöhen?
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{fpu, calc, angles, intersections, positioning, spy}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage{comment}
\usepackage{tkz-euclide}
\newcommand{\radiusOHL}[3]{
\path
(#1)coordinate(M)% Mittelpunkt
(#2)coordinate(A)% Anfangskoordinate
(#3)coordinate(B)% Endkoordinate
;
\path
let
\p1=(M), \p2=(A),
\n1={veclen({\x2-\x1},{\y2-\y1})}
in
pic[draw=black,angle radius=\n1]{angle=A--M--B} ;
}
\tikzset{zahn/.pic={
% Parameter
\def\N{36}
\def\rot{90-360/\N}
\def\bzhs{0.3}
\def\nutoeffnung{0.8}
\def\do{10}
\def\di{7}
\def\hzhs{0.4}
\def\hrues{0.4}
\def\hzks{0.1}
\def\p{2}
\def\delta{0.2}
\def\alphap{0.5}
\def\dw{1}
\def\rotorcolor{gray!50}
\def\statorcolor{gray}
% Berechnungen
\def\taupdeg{360/(2*\p)}
\def\tauNdeg{360/\N}
\pgfmathsetmacro\dzk{\di+\hzks*(\do-\di)};
\pgfmathsetmacro\drue{\do-\hrues*(\do-\di)};
\pgfmathsetmacro\dzhu{\do-(\hrues+\hzhs)*(\do-\di)};
\pgfmathsetmacro\dro{\di-2*\delta};
% Hilfslinien
\path[color=gray,dashed, name path=DAS] (0,0)++(\rot:\do/2) arc(\rot:\rot+2*360/\N:\do/2);% node {\tiny DAS};
\path[color=gray,dashed, name path=DIS] (0,0)++(\rot:\di/2) arc(\rot:\rot+2*360/\N:\di/2);% node {\tiny DIS};
\path[color=gray,dashed, name path=DRUE] (0,0)++(\rot:\drue/2) arc(\rot:\rot+2*360/\N:\drue/2);% node {\tiny DRUE};
\path[color=gray,dashed, name path=DZK] (0,0)++(\rot:\dzk/2) arc(\rot:\rot+2*360/\N:\dzk/2);% node {\tiny DZK};
\path[color=gray,dashed,name path=GL] (0,0) -- (0, 1.1*\do/2);% node[above] {\tiny GL};
\path[color=gray,dashed,name path=GZ] (0,0) -- ({1.1*\do/2*sin(\nutoeffnung*360/(2*\N))}, {1.1*\do/2*cos(\nutoeffnung*360/(2*\N))});% node[above] {\tiny GZ};
\path[color=gray,dashed,name path=GR] (0,0) -- ({1.1*\do/2*sin(360/(2*\N))}, {1.1*\do/2*cos(360/(2*\N))});% node[above] {\tiny GR};
% Schnittpunkte & Koordinaten
\path[name intersections={of=GL and DIS}](intersection-1) coordinate (c1);% node {\tiny 1};
\path[name intersections={of=GZ and DIS}](intersection-1) coordinate (c2);% node {\tiny 2};
\path[name intersections={of=GZ and DZK}](intersection-1) coordinate (c3);% node {\tiny 3};
\path[green] (c3) -- (0, |- c3) coordinate (ch34);
\path[green] (ch34) -- ($(ch34)!\bzhs!(c3)$) coordinate (chh34);
\path (chh34) -- (chh34 |-,\dzhu/2) coordinate (c4);
\path[name path=BZH, color=blue] (chh34) -- (chh34 |-,\do/2);
\path[name intersections={of=BZH and DRUE}](intersection-1) coordinate (c5);% node {\tiny 5};
\path[name intersections={of=GR and DRUE}](intersection-1) coordinate (c6);% node {\tiny 6};
\path[name intersections={of=GR and DAS}] (intersection-1) coordinate (c7);% node {\tiny 7};
\path[name intersections={of=GL and DAS}](intersection-1) coordinate (c8);% node {\tiny 8};
\path[name path=HLW] (c3) -- (c4);
\path (0,0) coordinate (D) -- (0,1.1*\do/2) coordinate (E);
% Spiegelung
\foreach \x in {2,3,4,5,6,7} {
%\path (c\x);
%\pgfgetlastxy{\xc}{\yc};
%\path (-\xc, \yc) coordinate (c\x m);% node{\tiny \x m};
\tkzDefPointBy[reflection=over D--E](c\x) \tkzGetPoint{c\x m};
};
% Füllung
\begin{scope}[even odd rule]
\clip circle(\do/2) circle(\drue/2) circle(\dzk/2) circle(\di/2);
\fill[\statorcolor, opacity=1] (c2m) -- (c2) -- (c3) -- (c4) -- (c5) -- (c6) -- (c7) -- ($(c7)!0.5!-45:(c8)$) -- (c8) -- ($(c8)!0.5!-45:(c7m)$) -- (c7m) -- (c6m) -- (c5m) -- (c4m) -- (c3m);
\end{scope}
\begin{scope}[even odd rule]
\clip circle(\drue/2) circle(\dzk/2);
\fill[\statorcolor, opacity=1] (c2m) -- (c2) -- (c3) -- (c4) -- (c5) -- ($(c5)!0.5!-45:(c5m)$) -- (c5m) -- (c4m) -- (c3m);
\end{scope}
% Kontur
\radiusOHL{{0,0}}{c7}{c7m};
\radiusOHL{{0,0}}{c6}{c5};
\draw (c5) -- (c4);
\draw (c4) -- (c3);
\draw (c3) -- (c2);
\radiusOHL{{0,0}}{c2}{c2m};
\draw (c2m) -- (c3m);
\draw (c3m) -- (c4m);
\draw (c4m) -- (c5m);
\radiusOHL{{0,0}}{c5m}{c6m};
% WICKLUNG
% Hilfslinien
\path[color=gray,dashed,name path=GW] (0,0) -- ({1.1*\do/2*sin(0.8*\nutoeffnung*360/(2*\N))}, {1.1*\do/2*cos(0.8*\nutoeffnung*360/(2*\N))});% node[above] {\tiny GZ};
% Koordinaten
\path[name intersections={of=GW and HLW}](intersection-1) coordinate (cw1);% node {\tiny w1};
\path[name intersections={of=GW and DRUE}](intersection-1) coordinate (cw2);% node {\tiny w2};
\path (cw1);
\pgfgetlastxy{\xc}{\yc};
\path (-\xc, \yc) coordinate (cw4);
\path (cw1);
\pgfgetlastxy{\xc}{\yc};
\pgfmathsetmacro\rtemp{sqrt(\xc^2+\yc^2)}
\pgfmathsetmacro\dcoil{2*\rtemp}
\path (cw2);
\pgfgetlastxy{\xc}{\yc};
\path (-\xc, \yc) coordinate (cw3);
% Spiegelung
\foreach \x in {1,2} {
\tkzDefPointBy[reflection=over D--E](cw\x) \tkzGetPoint{cw\x m};
};
% Füllung
\begin{scope}[even odd rule]
\clip circle(\drue/2) circle(\dcoil pt/2);
\fill[orange, opacity=0.75] (cw1) -- (cw2) -- ($(cw2)!0.5!-45:(c5)$) -- (c5) -- (c4);
\end{scope}
\begin{scope}[even odd rule]
\clip circle(\drue/2) circle(\dcoil pt/2);
\fill[orange, opacity=0.75] (cw1m) -- (cw2m) -- ($(cw2m)!0.5!45:(c5m)$) -- (c5m) -- (c4m);
\end{scope}
% Kontur
%rechts
\draw[] (cw1) -- (cw2);
\radiusOHL{{0,0}}{cw2}{c5}
\draw[] (c5) -- (c4) -- (cw1);
%links
\draw[] (cw1m) -- (cw2m);
\radiusOHL{{0,0}}{c5m}{cw2m}
\draw[] (c5m) -- (c4m) -- (cw1m);
}}
\begin{document}
\begin{tikzpicture}[spy using outlines={circle, magnification=7, size=17mm, connect spies}]
\def\N{36}
\def\tauNdeg{360/\N}
\pgfmathsetmacro\k{\N-1}
\foreach \i in {0,1,2}{%,...,\k} {
\pgfmathsetmacro\phirot{\i*\tauNdeg}
\draw (0,0) pic[rotate=\phirot]{zahn};
};
\spy[red] on (c7) in node at (0,3);
\end{tikzpicture}
\end{document}
Hier mit pic. Ich musste einiges ändern. Scheinbar klappt pic in Verbindung mit meinen vorherigen Koordinatenberechnungen über pgfmathsetmacro nicht so.
Für mich sieht es so aus, als läge da eine Berechnungsungenauigkeit vor bei meinen Radien.
Diese werden mittels \radiusOHL berechnet. Kann man die Genauigkeit erhöhen?
[code]
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{fpu, calc, angles, intersections, positioning, spy}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage{comment}
\usepackage{tkz-euclide}
\newcommand{\radiusOHL}[3]{
\path
(#1)coordinate(M)% Mittelpunkt
(#2)coordinate(A)% Anfangskoordinate
(#3)coordinate(B)% Endkoordinate
;
\path
let
\p1=(M), \p2=(A),
\n1={veclen({\x2-\x1},{\y2-\y1})}
in
pic[draw=black,angle radius=\n1]{angle=A--M--B} ;
}
\tikzset{zahn/.pic={
% Parameter
\def\N{36}
\def\rot{90-360/\N}
\def\bzhs{0.3}
\def\nutoeffnung{0.8}
\def\do{10}
\def\di{7}
\def\hzhs{0.4}
\def\hrues{0.4}
\def\hzks{0.1}
\def\p{2}
\def\delta{0.2}
\def\alphap{0.5}
\def\dw{1}
\def\rotorcolor{gray!50}
\def\statorcolor{gray}
% Berechnungen
\def\taupdeg{360/(2*\p)}
\def\tauNdeg{360/\N}
\pgfmathsetmacro\dzk{\di+\hzks*(\do-\di)};
\pgfmathsetmacro\drue{\do-\hrues*(\do-\di)};
\pgfmathsetmacro\dzhu{\do-(\hrues+\hzhs)*(\do-\di)};
\pgfmathsetmacro\dro{\di-2*\delta};
% Hilfslinien
\path[color=gray,dashed, name path=DAS] (0,0)++(\rot:\do/2) arc(\rot:\rot+2*360/\N:\do/2);% node {\tiny DAS};
\path[color=gray,dashed, name path=DIS] (0,0)++(\rot:\di/2) arc(\rot:\rot+2*360/\N:\di/2);% node {\tiny DIS};
\path[color=gray,dashed, name path=DRUE] (0,0)++(\rot:\drue/2) arc(\rot:\rot+2*360/\N:\drue/2);% node {\tiny DRUE};
\path[color=gray,dashed, name path=DZK] (0,0)++(\rot:\dzk/2) arc(\rot:\rot+2*360/\N:\dzk/2);% node {\tiny DZK};
\path[color=gray,dashed,name path=GL] (0,0) -- (0, 1.1*\do/2);% node[above] {\tiny GL};
\path[color=gray,dashed,name path=GZ] (0,0) -- ({1.1*\do/2*sin(\nutoeffnung*360/(2*\N))}, {1.1*\do/2*cos(\nutoeffnung*360/(2*\N))});% node[above] {\tiny GZ};
\path[color=gray,dashed,name path=GR] (0,0) -- ({1.1*\do/2*sin(360/(2*\N))}, {1.1*\do/2*cos(360/(2*\N))});% node[above] {\tiny GR};
% Schnittpunkte & Koordinaten
\path[name intersections={of=GL and DIS}](intersection-1) coordinate (c1);% node {\tiny 1};
\path[name intersections={of=GZ and DIS}](intersection-1) coordinate (c2);% node {\tiny 2};
\path[name intersections={of=GZ and DZK}](intersection-1) coordinate (c3);% node {\tiny 3};
\path[green] (c3) -- (0, |- c3) coordinate (ch34);
\path[green] (ch34) -- ($(ch34)!\bzhs!(c3)$) coordinate (chh34);
\path[color=blue] (chh34) -- (chh34 |-,\dzhu/2) coordinate (c4);
\path[name path=BZH, color=blue] (chh34) -- (chh34 |-,\do/2);
\path[name intersections={of=BZH and DRUE}](intersection-1) coordinate (c5);% node {\tiny 5};
\path[name intersections={of=GR and DRUE}](intersection-1) coordinate (c6);% node {\tiny 6};
\path[name intersections={of=GR and DAS}] (intersection-1) coordinate (c7);% node {\tiny 7};
\path[name intersections={of=GL and DAS}](intersection-1) coordinate (c8);% node {\tiny 8};
\path[name path=HLW] (c3) -- (c4);
\path (0,0) coordinate (D) -- (0,1.1*\do/2) coordinate (E);
% Spiegelung
\foreach \x in {2,3,4,5,6,7} {
%\path (c\x);
%\pgfgetlastxy{\xc}{\yc};
%\path (-\xc, \yc) coordinate (c\x m);% node{\tiny \x m};
\tkzDefPointBy[reflection=over D--E](c\x) \tkzGetPoint{c\x m};
};
% Füllung
\begin{scope}[even odd rule]
\clip circle(\do/2) circle(\drue/2) circle(\dzk/2) circle(\di/2);
\fill[\statorcolor, opacity=1] (c2m) -- (c2) -- (c3) -- (c4) -- (c5) -- (c6) -- (c7) -- ($(c7)!0.5!-45:(c8)$) -- (c8) -- ($(c8)!0.5!-45:(c7m)$) -- (c7m) -- (c6m) -- (c5m) -- (c4m) -- (c3m);
\end{scope}
\begin{scope}[even odd rule]
\clip circle(\drue/2) circle(\dzk/2);
\fill[\statorcolor, opacity=1] (c2m) -- (c2) -- (c3) -- (c4) -- (c5) -- ($(c5)!0.5!-45:(c5m)$) -- (c5m) -- (c4m) -- (c3m);
\end{scope}
% Kontur
\radiusOHL{{0,0}}{c7}{c7m};
\radiusOHL{{0,0}}{c6}{c5};
\draw (c5) -- (c4);
\draw (c4) -- (c3);
\draw (c3) -- (c2);
\radiusOHL{{0,0}}{c2}{c2m};
\draw (c2m) -- (c3m);
\draw (c3m) -- (c4m);
\draw (c4m) -- (c5m);
\radiusOHL{{0,0}}{c5m}{c6m};
% WICKLUNG
% Hilfslinien
\path[color=gray,dashed,name path=GW] (0,0) -- ({1.1*\do/2*sin(0.8*\nutoeffnung*360/(2*\N))}, {1.1*\do/2*cos(0.8*\nutoeffnung*360/(2*\N))});% node[above] {\tiny GZ};
% Koordinaten
\path[name intersections={of=GW and HLW}](intersection-1) coordinate (cw1);% node {\tiny w1};
\path[name intersections={of=GW and DRUE}](intersection-1) coordinate (cw2);% node {\tiny w2};
\path (cw1);
\pgfgetlastxy{\xc}{\yc};
\path (-\xc, \yc) coordinate (cw4);
\path (cw1);
\pgfgetlastxy{\xc}{\yc};
\pgfmathsetmacro\rtemp{sqrt(\xc^2+\yc^2)}
\pgfmathsetmacro\dcoil{2*\rtemp}
\path (cw2);
\pgfgetlastxy{\xc}{\yc};
\path (-\xc, \yc) coordinate (cw3);
% Spiegelung
\foreach \x in {1,2} {
\tkzDefPointBy[reflection=over D--E](cw\x) \tkzGetPoint{cw\x m};
};
% Füllung
\begin{scope}[even odd rule]
\clip circle(\drue/2) circle(\dcoil pt/2);
\fill[orange, opacity=0.75] (cw1) -- (cw2) -- ($(cw2)!0.5!-45:(c5)$) -- (c5) -- (c4);
\end{scope}
\begin{scope}[even odd rule]
\clip circle(\drue/2) circle(\dcoil pt/2);
\fill[orange, opacity=0.75] (cw1m) -- (cw2m) -- ($(cw2m)!0.5!45:(c5m)$) -- (c5m) -- (c4m);
\end{scope}
% Kontur
%rechts
\draw[] (cw1) -- (cw2);
\radiusOHL{{0,0}}{cw2}{c5}
\draw[] (c5) -- (c4) -- (cw1);
%links
\draw[] (cw1m) -- (cw2m);
\radiusOHL{{0,0}}{c5m}{cw2m}
\draw[] (c5m) -- (c4m) -- (cw1m);
}}
\begin{document}
\begin{tikzpicture}[spy using outlines={circle, magnification=7, size=17mm, connect spies}]
\def\N{36}
\def\tauNdeg{360/\N}
\pgfmathsetmacro\k{\N-1}
\foreach \i in {0,1,2}{%,...,\k} {
\pgfmathsetmacro\phirot{\i*\tauNdeg}
\draw (0,0) pic[rotate=\phirot]{zahn};
};
\spy[red] on (c7) in node at (0,3);
\end{tikzpicture}
\end{document}
[/code]