画图计算问题

一级用户组
\documentclass[tikz,border=10pt]{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(2.5,0){B}
\tkzDefPoint(4.5,0){N}
\tkzDefPoint(1,sqrt(3)/3){C}
\tkzDefPoint(4.5,4.5 * sqrt(3)/3){M}

\tkzDefPointBy[rotation in rad= center B angle (- 2 * pi/3)](C) \tkzGetPoint{D}
\tkzDefLine[parallel=through D](A,B) \tkzGetPoint{D_temp}
\tkzInterLL(D,D_temp)(A,C) \tkzGetPoint{F}

\tkzDefLine[perpendicular=through D](A,B) \tkzGetPoint{D_perp}
\tkzInterLL(D,D_perp)(A,C) \tkzGetPoint{E}
\tkzInterLL(D,D_perp)(A,B) \tkzGetPoint{P}

\tkzDefPointBy[rotation in rad= center B angle (- 2 * pi/3)](A) \tkzGetPoint{H}
 
\tkzDrawSegments(A,M B,C B,D D,F A,N P,E)
\tkzDrawSegments[dashed](B,H)
\tkzLabelPoints[below](A)
\tkzLabelPoints[below](B)
\tkzLabelPoints[left](C)
\tkzLabelPoints[right](D)
\tkzLabelPoints[left](F)
\tkzLabelPoints[above](E)
\tkzLabelPoints[right](M)
\tkzLabelPoints[right](N)
\tkzLabelPoints[above](H)
\end{tikzpicture}
\end{document}

现在的效果是:

image.png

想要达到的效果是:

image.png

使我困惑的地方是:

H 点应该位于线段 AE 上, 但是画完之后发现 H 点与 E 点重合

此图的出处:

image.webp

最新回复
  • Explorer 一级用户组

    这似乎更多是个数学问题而不是latex问题...

    画图的时候,为了精准性,要考虑图形如何进行唯一确定

    \tkzDefPoint(0,0){A} 
    \tkzDefPoint(2.5,0){B} 
    \tkzDefPoint(4.5,0){N} 
    \tkzDefPoint(1,sqrt(3)/3){C} 
    \tkzDefPoint(4.5,4.5 * sqrt(3)/3){M} 

    这里取定NAM的夹角为 30 度,以及设定 AC 的长度 似乎都是不太稳健的,在大量特殊角的情况下,出现特殊情况的重合也是合理的吧(doge)

    19天前
  • Explorer 一级用户组

    先给出方便调节角度的代码吧,我感觉alpha=30°的话, 这个共线是可以证明的:

    \documentclass[tikz,border=10pt]{standalone}
    \usepackage{tkz-euclide}
    \usepackage{fourier}
    \begin{document}
    \begin{tikzpicture}
    \def\myalpha{40}%<----------
    \tkzDefPoints{
        0/0/A, 
        2.5/0/B,
        4.5/0/N, 
        1/\fpeval{1*tand(\myalpha)}/C, 
        4.5/\fpeval{4.5*tand(\myalpha)}/M%<----------
    }
    
    \tkzDefPointBy[rotation= center B angle (2*\myalpha-180)](C) \tkzGetPoint{D}
    \tkzDefLine[parallel=through D](A,B) \tkzGetPoint{D_temp}
    \tkzInterLL(D,D_temp)(A,C) \tkzGetPoint{F}
    
    \tkzDefLine[perpendicular=through D](A,B) \tkzGetPoint{D_perp}
    \tkzInterLL(D,D_perp)(A,C) \tkzGetPoint{E}
    \tkzInterLL(D,D_perp)(A,B) \tkzGetPoint{P}
    
    \tkzDefPointBy[rotation= center B angle (2*\myalpha-180)](A) \tkzGetPoint{H}
     
    \tkzDrawSegments(A,M B,C B,D D,F A,N P,E)
    \tkzDrawSegments[dashed,red](B,H)
    \tkzLabelPoints[below](A,B)
    \tkzLabelPoints[left](C,F)
    \tkzLabelPoints[above](E,H)
    \tkzLabelPoints[right](D,M,N)
    \end{tikzpicture}
    \end{document}
    image.png

    19天前
  • Explorer 一级用户组
    PixPin-2026-08-04_19-51-51.webp

    稍微说下可能的一种证明思路,不妨假定α=30°,那么根据题目的构造,将小三角形旋转,可以轻松构造出一对全等三角形(也就是图中阴影部分);这意味着阴影三角形的角度为30°;同时橙色线也是在直线上选取的,橙色线构成了一个等腰三角形,这意味着上方粉色框内的另一个角也是30°,连接D点和H点并延长交横轴于点D',考虑三角形AHD',内角和为180°,两个被粉色框出的内角和为90°,换而言之,这意味着无论B点坐标如何,D点与H点必定有相同的横坐标。解决方案嘛,考虑加入角度这个变量就好了,不要写死α=30和一些正切值...

    考虑如下的动画(虽然我感觉设计得不好....):

    \documentclass[border=5pt]{standalone}
    \usepackage{tikz,tkz-euclide}
    \usepackage{fourier}
    \usepackage{animate}
    \newcommand*\mydraw[1]{%
        \def\myalpha{#1}%<----------
        \begin{tikzpicture}
        \tkzDefPoints{0/0/A, 2.5/0/B,4.5/0/N,1/\fpeval{1*tand(\myalpha)}/C,4.5/\fpeval{4.5*tand(\myalpha)}/M}
        \tkzDefPointBy[rotation= center B angle (2*\myalpha-180)](C) \tkzGetPoint{D}
        \tkzDefLine[parallel=through D](A,B) \tkzGetPoint{D_temp}
        \tkzInterLL(D,D_temp)(A,C) \tkzGetPoint{F}
        \tkzDefLine[perpendicular=through D](A,B) \tkzGetPoint{D_perp}
        \tkzInterLL(D,D_perp)(A,C) \tkzGetPoint{E}
        \tkzInterLL(D,D_perp)(A,B) \tkzGetPoint{P}
        \tkzDefPointBy[rotation= center B angle (2*\myalpha-180)](A) \tkzGetPoint{H}
        \tkzDrawSegments(A,M B,C B,D D,F A,N P,E)
        \tkzDrawSegments[dashed,red](B,H)
        \tkzLabelPoints[below](A,B)
        \tkzLabelPoints[left](C,F)
        \tkzLabelPoints[above](E,H)
        \tkzLabelPoints[right](D,M,N)
        \end{tikzpicture}
    }
    \begin{document}
    \begin{animateinline}[autoplay,loop,controls]{8}
        \multiframe{16}{iAngle=30+1}{%
            \mydraw{\iAngle}
        }
    \end{animateinline}
    \end{document}
    animate-example.gif

    19天前

请先登录后再回复 登录

uid:16 一级用户组
关注
一名普通业余LaTeX爱好者
日常循环:写代码 → 编译报错 → 查阅文档 → 修改代码 → 重新编译
常年困扰:图片乱跑、参考文献乱序、字体缺失、宏包版本冲突
依然热爱这份需要耐心、慢工出细活的排版乐趣。
愿所有人远离 Missing $ inserted
发帖 1
评论 0
粉丝 0
关注 0
发新帖
目录