可以用解析方式, 解方程得到答案, 然后利用计算的数据来绘图, 需要一定的计算量, 参考下图
我懒得计算, 就用二分法来寻找点 E
.
\begin{tikzpicture}
\def\thresholdvalue{0.0001}
\tkzDefPoints{0/0/O, -1/0/B, 1/0/D}
\coordinate (B') at(B);
\coordinate (D') at(D);
%用二分法寻找点 E
%当 |BD/CD - 3/4| <= \thresholdvalue 时, 停止
\def\calvalue{
\tkzDefMidPoint(B',D')
\tkzGetPoint{E}
\tkzCalcLength(E,D)
\tkzGetLength{lenED}
\tkzInterCC[R](O,1)(D,\lenED)
\tkzGetFirstPoint{A}
\tkzDefPointBy[rotation=center E angle -45](D)
\tkzGetPoint{E'}
\tkzInterLL(A,D)(E,E')
\tkzGetPoint{C}
\tkzCalcLength(C,D)
\tkzGetLength{lenCD}
\edef\BDvsCD{\fpeval{2/\lenCD}}
\edef\conditionA{\fpeval{(\BDvsCD - 3/4) > \thresholdvalue}}
\ifnum\conditionA=1
\coordinate (D') at(E);
\expandafter\calvalue
\else
\edef\conditionB{\fpeval{(\BDvsCD - 3/4) < -\thresholdvalue}}
\ifnum\conditionB=1
\coordinate (B') at(E);
\expandafter\expandafter\expandafter\calvalue
\fi
\fi
}
\calvalue
\node [below left] at(B){$B$};
\node [above right] at(D){$D$};
\node [above right] at(E){$E$};
\node [above right] at(A){$A$};
\node [right] at(C){$C$};
\draw (B) -- (A);
\draw (B) -- (D);
\draw (B) -- (C);
\draw (E) -- (C);
\draw (A) -- (C);
\path (E);
\pgfgetlastxy{\macrox}{\macroy}
\tkzpttocm(\macrox){Ex}
\tkzpttocm(\macroy){Ey}
\node [right,align=left] at(3,0) {$\frac{BD}{CD}=\BDvsCD$\\$E=(\Ex,\Ey)$};
\end{tikzpicture}
我也来贡献一个答案,如果我来画这个图的「精确形式」的话,我会先搜答案:
答案给了我们一个新的条件:「AB/AD=7/4」
至此我们其实已经可以唯一确定这个图形了
图形的唯一确定是不太难的,此时45°的条件已经和现有的比例条件是可以互推的。但是画图的难点在于,如何让线段BC保持水平,我下面的代码利用了三角函数的方法来确定A/B/C的精确坐标。
\documentclass[border=5pt]{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}[scale=.5]
\def\c{7}
\def\b{\fpeval{4+4*sqrt(65)/3}}
\def\a{\fpeval{sqrt(\c^2+\b^2)}}
\def\myangle{\fpeval{atan(\b/\c)}}% radians
\tkzDefPoint(0,0){B}
\tkzDefPoint(\c*cos(\myangle),\c*sin(\myangle)){A}
\tkzDefPoint(\a,0){C}
\tkzDrawPolygon[thick](A,B,C)
% 取点「D」,满足「AD」=「4/7AB」= 4
\tkzDefPointWith[linear normed,K=4](A,C) \tkzGetPoint{D}
% ref: https://ask.latexstudio.net/ask/question/17889.html
\tkzDrawSegment[thick](B,D)
% 取点「D」,满足「AD」=「DE」= 4
\tkzDefPointWith[linear normed,K=4](D,B) \tkzGetPoint{E}
\tkzDrawSegment[thick](E,C)
\tkzMarkRightAngle[semithick,size=.6](B,A,C)
\tkzMarkAngle[semithick,size=.6](C,E,D)
\tkzLabelAngle[pos=1.25](C,E,D){$45^\circ$}
\tkzLabelPoint[above](A){$A$}
\tkzLabelPoint[left](B){$B$}
\tkzLabelPoint[right](C){$C$}
\tkzLabelPoint[above right=-2pt](D){$D$}
\tkzLabelPoint[below](E){$E$}
\end{tikzpicture}
\end{document}
从画图的角度来看,个人觉得预先做一些计算会更容易画一些...
另外这题是真难啊,得积累积累做题经验...
@u817 请问如果不做计算的话,有什么方法把「BC」放平吗,我没有什么想法...
我根据搜题的答案给了一个基于计算的思路...
@u70550
利用辅助文件, 编译两次. 第一次编译计算
\angle CBD
, 写入辅助文件, 第二次编译利用这个角度做旋转.@u817 类似这个链接(?)
但我总感觉只是画个不太复杂的图而已,在代码中修改输出例程的逻辑有些小题大做的嫌疑...不过这个方法应该是general的
@u70550
当然是先做出
AB/AD
这个答案比较好, 然后再绘图.