summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-01-25 03:01:31 +0000
committerNorbert Preining <norbert@preining.info>2020-01-25 03:01:31 +0000
commit75672286990bb55c7b46277f845d14eafcf2ba61 (patch)
tree29456eb5880d5a2629b2ae329423c9ceaaaf6887 /macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex
parente1192611f0655a1ccaff0dff2f53c7c65fa5db07 (diff)
CTAN sync 202001250301
Diffstat (limited to 'macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex')
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex237
1 files changed, 237 insertions, 0 deletions
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex
new file mode 100644
index 0000000000..aa1b259d8a
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex
@@ -0,0 +1,237 @@
+% tkz-obj-eu-circles.tex
+% Copyright 2011 by Alain Matthes
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+\def\fileversion{3.01c}
+\def\filedate{2020/01/23}
+\typeout{2020/01/23 3.01c tkz-obj-eu-circles.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% tkzCircle center and one point
+%<--------------------------------------------------------------------------–>
+% attention radius circle is defined by center and a point on the circle
+% R defined by center and the value of the radius
+% no need to define a circle with R tikz uses this method.
+% through instead of radius
+\def\tkz@numc{0}
+\pgfkeys{/tkzDefCircle/.cd,
+ through/.code = \def\tkz@numc{0},
+ radius/.code = \def\tkz@numc{0},
+ diameter/.code = \def\tkz@numc{1},
+ circum/.code = \def\tkz@numc{2},
+ in/.code = \def\tkz@numc{3},
+ ex/.code = \def\tkz@numc{4},% new
+ euler/.code = \def\tkz@numc{5},
+ nine/.code = \def\tkz@numc{5},
+ apollonius/.code = \def\tkz@numc{6},
+ orthogonal from/.code args = {#1}{\def\tkz@ptfrom{#1},
+ \def\tkz@numc{7}},
+ orthogonal through/.code args = {#1 and #2}{\def\tkz@ptone{#1}
+ \def\tkz@pttwo{#2}
+ \def\tkz@numc{8}},
+ spieker/.code = \def\tkz@numc{9},
+ K/.code = \def\tkz@koeff{#1},% apollonius
+ K = 1,
+ through
+ }
+\def\tkzDefCircle{\pgfutil@ifnextchar[{\tkz@DefCircle}{\tkz@DefCircle[]}}
+\def\tkz@DefCircle[#1](#2){%
+\begingroup
+\pgfqkeys{/tkzDefCircle}{#1}
+\ifcase\tkz@numc%
+ \tkzDefCircleThrough(#2)%
+ \or% 1
+ \tkzDefCircleD(#2)
+ \or% 2
+ \tkzDefCircumCircle(#2)
+ \or% 3
+ \tkzDefInCircle(#2)
+ \or% 4
+ \tkzDefExCircle(#2)
+ \or% 5
+ \tkzDefEulerCircle(#2)
+ \or% 6
+ \tkzDefApolloniusCircle(#2)
+ \or% 7
+ \tkzDefOrthogonalCircle(#2,\tkz@ptfrom)
+ \or% 8
+ \tkzDefOrthoThroughCircle(#2,\tkz@ptone,\tkz@pttwo)
+ \or% 9
+ \tkzDefSpiekerCircle(#2)
+ \fi
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+% Circum Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefCircumCircle(#1,#2,#3){%
+\begingroup
+ \tkzCircumCenter(#1,#2,#3)
+ \tkzCalcLength(#1,tkzPointResult)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% In(scribe) Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefInCircle(#1,#2,#3){%
+\begingroup
+ \tkzInCenter(#1,#2,#3)
+ \pgfnodealias{tkz@incenter}{tkzPointResult}
+ \tkzUProjection(#1,#3)(tkz@incenter)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkzCalcLength(tkzPointResult,tkz@incenter)
+ \pgfnodealias{tkzPointResult}{tkz@incenter}
+ \pgfnodealias{tkzFirstPointResult}{tkz@incenter}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Ex(scribe) Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefExCircle(#1,#2,#3){%
+\begingroup
+ \tkzExCenter(#1,#2,#3)
+ \pgfnodealias{tkz@excenter}{tkzPointResult}
+ \tkzUProjection(#1,#3)(tkz@excenter)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkzCalcLength(tkzPointResult,tkz@excenter)% for tkzGetLength
+ \pgfnodealias{tkzPointResult}{tkz@excenter}
+ \pgfnodealias{tkzFirstPointResult}{tkz@excenter}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Radius Ex Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefExRadius(#1,#2,#3){%
+\begingroup
+ \tkzExCenter(#1,#2,#3)
+ \tkzUProjection(#1,#3)(tkzPointResult)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% The nine-point circle, also called Euler's circle or the Feuerbach circle
+% best way Ma,Mb,Mc circum center 2020
+%<--------------------------------------------------------------------------–>
+\def\tkzDefEulerCircle(#1,#2,#3){%
+\begingroup
+ \tkzDefMidPoint(#1,#2) \pgfnodealias{tkz@e1}{tkzPointResult}
+ \tkzDefMidPoint(#2,#3) \pgfnodealias{tkz@e2}{tkzPointResult}
+ \tkzDefMidPoint(#1,#3) \pgfnodealias{tkz@e3}{tkzPointResult}
+ \tkzCircumCenter(tkz@e1,tkz@e2,tkz@e3)
+ \tkzCalcLength(tkzPointResult,tkz@e1)
+\endgroup
+}
+\let\tkzDefNinePointsCircle\tkzEulerCircle%
+\let\tkzFeuerBachCircle\tkzEulerCircle%
+
+\def\tkzDefEulerRadius(#1,#2,#3){%
+\begingroup
+ \tkzEulerCenter(#1,#2,#3)
+ \pgfnodealias{eur@pta}{tkzPointResult}
+ \tkzDefMidPoint(#1,#2)
+ \tkzCalcLength(eur@pta,tkzPointResult)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Apollonius circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefApolloniusCircle(#1,#2){%
+\begingroup
+ \tkz@VecK[\tkz@koeff/(1+\tkz@koeff)](#1,#2)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \tkz@VecK[\tkz@koeff/(\tkz@koeff-1)](#1,#2)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkzDefMidPoint(tkzFirstPointResult,tkzSecondPointResult)
+ \tkzCalcLength(tkzPointResult,tkzFirstPointResult)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Apollonius radius
+%<--------------------------------------------------------------------------–>
+\pgfkeys{/tkzApolloniusR/.cd,
+ K/.code = \def\tkz@koeff{#1},% apollonius
+ K = 1
+ }
+\def\tkzDefApolloniusRadius{\pgfutil@ifnextchar[{%
+ \tkz@DefApolloniusRadius}{\tkz@DefApolloniusRadius[]}}
+\def\tkz@DefApolloniusRadius[#1](#2,#3){%
+\begingroup
+ \pgfqkeys{/tkzApolloniusR}{#1}
+ \tkz@VecK[\tkz@koeff/(1+\tkz@koeff)](#2,#3)
+ \pgfnodealias{apo@pta}{tkzPointResult}
+ \tkz@VecK[\tkz@koeff/(\tkz@koeff-1)](#2,#3)
+ \pgfnodealias{apo@ptb}{tkzPointResult}
+ \tkzDefMidPoint(apo@pta,apo@ptb)
+ \tkzCalcLength(tkzPointResult,apo@pta)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Apollonius point
+%<--------------------------------------------------------------------------–>
+
+\pgfkeys{/tkzApolloniusP/.cd,
+ K/.code = \def\tkz@koeff{#1},% apollonius
+ K = 1
+ }
+\def\tkzDefApolloniusPoint{\pgfutil@ifnextchar[{\tkz@DefApolloniusPoint}{\tkz@DefApolloniusPoint[]}}
+\def\tkz@DefApolloniusPoint[#1](#2,#3){%
+\begingroup
+ \pgfqkeys{/tkzApolloniusP}{#1}
+ \tkzDefBarycentricPoint(#2=1,#3=\tkz@koeff)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Apollonius center
+%<--------------------------------------------------------------------------–>
+\pgfkeys{/tkzApolloniusC/.cd,
+ K/.code = \def\tkz@koeff{#1},% apollonius
+ K = 1
+ }
+\def\tkzApolloniusCenter{\pgfutil@ifnextchar[{\tkz@ApolloniusCenter}{\tkz@ApolloniusCenter[]}}
+\def\tkz@ApolloniusCenter[#1](#2,#3){%
+\begingroup
+ \pgfqkeys{/tkzApolloniusC}{#1}
+ \tkz@VecK[\tkz@koeff/(1+\tkz@koeff)](#2,#3)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \tkz@VecK[\tkz@koeff/(\tkz@koeff-1)](#2,#3)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkzDefMidPoint(tkzFirstPointResult,tkzSecondPointResult)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefOrthogonalCircle(#1,#2,#3){%
+\begingroup
+ \tkzTgtFromP(#1,#2)(#3)
+ \tkzCalcLength[cm](#1,tkzFirstPointResult)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefOrthoThroughCircle(#1,#2,#3,#4){%
+\begingroup
+ \tkzCalcLength[cm](#1,#3)\tkzGetLength{tkz@lnb}%
+ \edef\tkz@lnc{\fpeval{1/\tkz@lnb}}
+ \tkzVecKNorm[\tkz@lnc](#1,#3)
+ \pgfnodealias{tkz@PointResult}{tkzPointResult}
+ \tkzCircumCenter(tkz@PointResult,#3,#4)
+ \tkzCalcLength(tkzPointResult,#3)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Spieker Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefSpiekerCircle(#1,#2,#3){%
+\begingroup
+ \tkzSpiekerCenter(#1,#2,#3)
+ \pgfnodealias{tkz@spka}{tkzPointResult}
+ \tkzDefMidPoint(#1,#2)
+ \tkzUProjection(#1,#2)(tkzPointResult)
+ \tkzCalcLength(tkz@spka,tkzPointResult)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% End Def Circle
+%<--------------------------------------------------------------------------–>
+ \makeatother
+\endinput \ No newline at end of file