TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am trying to draw something called an "Ossanna circle" in PGF.

Here is my MWE. Forgive its size -- you need all the intermediate points to get the points that we need for this question:



\usepackage{amsmath} % amssymb ist schon in mathdesign enthalten




    \coordinate (O) at (0,0);
    \coordinate (Un) at (0,193.55/50);
    \coordinate (I0) at (90-85.6:12.5/10);
    \coordinate (IK) at (180-122:133.53/10);
  \draw[font=\normalsize,<-] (-0.1,0) -- (20,0) node(IM)[right=3pt] {\text Im}; %{$\text$}; imaginary axis
  \draw[font=\normalsize,->] (0,-0.1) -- (0,20) node(RE)[above=2pt] {\text Re} ; % real axis
  \draw[thick,color=blue,->] (O) -- (Un) node[above=2pt,left=2pt] {$\text U_n$}; % rated voltage
  \draw[thick,color=red,->] (O) -- (I0) node[above=2pt,right=2pt] (Leerlaufstrom) {$\text I_0$}; % no-load current
  \draw[thick,color=red,->] (O) -- (IK) node[above=2pt,right=2pt] (Kurzschlussstrom) {$\text I_k$}; % blocked rotor current
  \draw[thin,dotted] (I0) -- (IK); % dotted line between tips of I_0 and I_K
  \coordinate (S) at ($(I0)!.5!(IK)$); % point halfway between tips of I_0 and I_K, new point is called S
  \coordinate (S0) at ($ (S) !1.5! 90:(IK) $); % new point S0, turned -90° from line between S and I_K and 1.5 times as long as I_K to S
  \coordinate (S1) at ($ (S) !1.5! -90:(IK) $); % new point S1, turned -90° from line between S and I_K and 1.5 times as long as I_K to S 
  \coordinate (S2) at ($ (IK) !1! 58:(O) $); % new point S2, turned 58° from line between I_K and origin O and 1 times as long as I_K to O 
  \draw[thin,dotted] (S0) -- (S1); % dotted line between S0 and S1 (bisector)
  \draw[thin,dotted] (IK) -- (S2); % dotted line between I_K and S2
  \path[name path=S0--S1] (S0) -- (S1); % labeling of bisector path as S0--S1
  \path[name path=IK--S2] (IK) -- (S2); % labeling of path I_K to S2 als IK--S2
  \path[name intersections={of=S0--S1 and IK--S2,by={[label=left:M]M}}]; % definition of intersection of the two lines as M, with label
  \fill[red] (M) circle (1.5pt); % drawing of point M as circle of diameter 1.5 pt, red fill
  \node (KR) [name path=KRI,draw,thick,dotted,circle through=(IK)] at (M) {}; % Ossanna circle through tip of I_K with M as centre
  \path[name path=IK--IM,draw,thin] (IK) -- (IK |- IM); % perpendicular from IK to the imaginary axis
  \coordinate (P1) at ($ (IK |- IM) !0.5! (IK)$); % Power P1
  \draw[thick,->] (IK |- IM) -- (P1) node[above=2pt,left=2pt] {$\text P_1$}; % P1 line
  \path[name path=I0--P1,draw,thin] (I0) -- ($ (I0) !3! (P1) $); % path over I0 and P1 to circle
  \path[name intersections={of=I0--P1 and KRI,by={[label=right:$\text S_\infty$]SINF}}]; % definition of intersection as S_infinity
  \fill[black] (SINF) circle (1.5pt); % drawing of point S_infinity
  \path[name path=O--RAND] ($ (0,0) !0.5! -20:(IM) $) -- ($ (0,0) !1! -20:(IM) $); % random line from origin
  \path[name intersections={of=O--RAND and KRI,by={[label=right:$\text {Wow}$]RAND}}]; % "random" intersection of line and circle
  \fill[green] (RAND) circle (1.5pt); % drawing of random point in green
  \path[name path=RAND--SINF,draw,thin] (RAND) -- ($ (RAND) !1.25! (SINF) $); % line from random point to S_infinity
  \node at (IK) [above=3pt,left=5pt] {$\text S_{\text I_k}$}; % labeling of S_IK
  \fill[black] (IK) circle (1.5pt); % drawing of point S_IK
  \path[name path=I0--RAND,draw,thin] (I0) -- (RAND); % drawing of line from random point to no-load current
  \path[name path=RAND--IK,draw,thin] (RAND) -- ($ (RAND) !1.25! (IK) $); % line from random point to blocked rotor current


The result looks like this:

enter image description here

Here is my challenge: I want to draw a line parallel to RAND--SINF, which touches both RAND--IK and RAND--I0, except that this line has to be exactly 10 cm (or units) long.

How can I do this?

share|improve this question
You should be using tkz-euclide. It's designed for complicated diagrams like this....projections are covered on page 39. – DJP Jan 16 '13 at 0:15
Does this have to be at point Wow or a point along RAND--SINF such that the other end of the segment is at RAND--IO? – hpesoj626 Jan 16 '13 at 6:04
@DJP, @hpesoj626 -- sorry, I realise now that I made a mistake -- I meant parallel, not perpendicular, to RAND--SINF. – Stephen Bosch Jan 16 '13 at 7:52
@StephenBosch: Are you sure that the constraint of the line being exactly 10cm long is necessary? As I understand it, the slip line (which I assume you're trying to draw) can be drawn at a somewhat arbitrary distance from Wow, and the scale on the slip line is then determined by the intersection between Wow--I1 (where I1 is the short-circuit) and the slip line. Interestingly, you're not using I1 in your construction at all. Do you have a link to the construction description your drawing is based on? – Jake Jan 16 '13 at 9:35
@Jake I_k is the same as I1 (K = "Kurzschlussstrom" in German). No link to a construction description, this circle is based on real bench data (I can provide you with this if via e-mail if you would like). It was recommended we make the scale 10 cm, but I never understood why that was necessary myself. I would still like to know how to accomplish this, though. It also needs to be scaled into tenths, perhaps a 10 cm line is is easier to segment this way if created by hand. – Stephen Bosch Jan 16 '13 at 18:20
up vote 4 down vote accepted

As DJP said, tkz-euclide is great for this. It allows you to construct the whole thing very comfortably, and it can easily calculate the angles necessary to construct the 10cm parallel line:




% Define known points

% Draw lines (just for illustration, not needed for the construction)
\tkzDrawSegment[thick, red](O,Ik)
\tkzDrawSegment[thick, red](O,I0)
\tkzDrawLine[add=0 and 20](O,I)
\tkzDrawLine[add=0 and 20](O,R)

% Define points describing mediator of I0 and Ik, draw line for illustration
\tkzDefLine[mediator](I0,Ik) \tkzGetPoints{A}{B}
\tkzDrawLine[dashed, gray!50, add=-0.2 and 0](A,B)

% Define a point by rotating Ik--O by 58 degrees around O
\tkzDefPointBy[rotation=center Ik angle 58](O) \tkzGetPoint{C}

%Draw line for illustration
\tkzDrawLine[dashed, gray!50](Ik, C)

% Find intersection of Ik--C and A--B, save as M
\tkzInterLL(Ik,C)(A,B) \tkzGetPoint{M}

% Find projection of Ik onto imaginary axis, save as D
\tkzDefPointBy[projection=onto O--I](Ik) \tkzGetPoint{D}
% Find halfway point between D and Ik, save as P1
\tkzDefPointWith[linear,K=0.5](D,Ik) \tkzGetPoint{P1}

% Draw Ossanna circle for illustration
% Find Sinf as intersection between Ossanna circle
\tkzInterLC(I0,P1)(M,Ik) \tkzGetPoints{Sinf'}{Sinf}

% Random point

% Find intersection between O--RND and Ossanna circle
\tkzInterLC(O,RND)(M,Ik) \tkzGetPoints{Wow}{Wow'}

% Mark angles that we need to measure for illustration
\tkzDrawSegments(Wow,Sinf Wow,I0 Wow,Ik)
\tkzMarkAngle[size=1.5, fill=orange](Sinf,Wow,Ik)

% Measure and save angles

% Calculate length \a in pt along Wow--I0 at which our slip line starts if we want it to be 10cm long
\pgfmathsetmacro\a{10cm * sin(\beta)/sin(\gamma)}
% Find point E at which the slip line starts
\tkzInterLC[R](Wow,I0)(Wow,\a pt) \tkzGetPoints{E'}{E}
% Find point F at which the slip line ends
\tkzInterLC[R](Wow,Ik)(E,10cm) \tkzGetPoints{F}{F'}
% Draw slip line
\tkzDrawSegment[ultra thick, blue](E, F)

% Show the equivalent angle beta for illustration
\tkzMarkAngle[size=1.5, fill=orange](E,F,Wow)

\tkzDrawPoints(O,Un,I0,Ik,P1,M, Sinf, Wow, E)
\tkzLabelPoints(O,Un,I0,Ik, M, P1, Sinf, Wow)

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.