![TikZ: Получить координаты инцентра треугольника](https://rvso.com/image/328432/TikZ%3A%20%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D1%8B%20%D0%B8%D0%BD%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%B0%20%D1%82%D1%80%D0%B5%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%D0%B0.png)
Я хочу получить координатыинцентр треугольника. Я хотел бы иметь макрос
\incenter{name}{a}{b}{c}
который задает координату name
в центре треугольника, вершины которого имеют координаты a
, b
, c
.
Я хотел использоватьэтот расчетиспользование декартовых координат с let
командой, но это не работает с координатами.
решение1
Это взято более или менее прямо из tkz-euclide
документации ( texdoc -s euclide
):
\documentclass[border=2mm]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\newcommand{\incenter}[4]{%
\begin{tikzpicture}
\tkzInit[xmax=5,ymax=4]
\tkzClip
\tkzDefPoint(0,0){#2} %% Put the coordinates here
\tkzDefPoint(5,1){#3} %% for the desired
\tkzDefPoint(1,4){#4} %% triangle.
\tkzDrawPolygon[color=red](#2,#3,#4)
\tkzInCenter(#2,#3,#4)
\tkzGetPoint{G}
\tkzDrawPoint(G)
\node[below] at (G) {#1};
\end{tikzpicture}
}
\begin{document}
\incenter{name}{a}{b}{c}
\end{document}
Еще одно. Если вы хотите указать произвольный треугольник с помощью \incenter
, то вы можете попробовать это:
\documentclass[border=2mm]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\newcommand{\incenter}[2]{%
\begin{tikzpicture}
\foreach \x/\y [count=\i from 1] in {#2}{\tkzDefPoint(\x,\y){n-\i}}
\tkzInit[xmax=5,ymax=4]
\tkzClip
\tkzDrawPolygon[color=red](n-1,n-2,n-3)
\tkzInCenter(n-1,n-2,n-3)
\tkzGetPoint{G}
\tkzDrawPoint(G)
\node[below] at (G) {#1};
\end{tikzpicture}
}
\begin{document}
\incenter{Incenter!}{0/0.5,5/3,1/4}% {label}{x_1/y_1,x_2/y_2,x_3/y_3}
\end{document}
решение2
Если вы не против работы в баллах:
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}[x=1pt, y=1pt]
\draw [thick] (0, 0) coordinate (A) -- (20, 40) coordinate (B)
-- (40, 10) coordinate (C) -- cycle;
\tikzmath{%
coordinate \p, \I;
\p1 = (A); \p2 = (B); \p3 = (C);
\a = veclen(\px3-\px2, \py3-\py2);
\b = veclen(\px1-\px3, \py1-\py3);
\c = veclen(\px2-\px1, \py2-\py1);
% Get the inradius
\s = (\a + \b + \c) / 2;
\K = sqrt(\s) * sqrt(\s - \a) * sqrt(\s - \b) * sqrt(\s - \c);
\r = \K / \s;
% Normalize the lengths a bit
\m = max(\a, \b, \c);
\a = \a / \m; \b = \b / \m; \c = \c / \m;
% Get the incenter
\ix = (\a*\px1 + \b*\px2 + \c*\px3) / (\a + \b + \c);
\iy = (\a*\py1 + \b*\py2 + \c*\py3) / (\a + \b + \c);
\I = (\ix, \iy);
}
\fill (\I) circle [radius=1];
\draw [red] (\I) circle [radius=\r];
\end{tikzpicture}
\end{document}