免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

(tikz)点关于直线的对称点

角**,夜**  14:14:36
kk,像这样的图,一定要知道坐标才能用tikz画吗?
QQ图片20200224161658.png
2020-2-24 16:18

需要两个操作:对称、延长。
我想到的是,先作垂足,再延长-1倍,也就是 \$(A)!(P)!(B)!-1!(P)\$ 就是 P 关于 AB 的对称点。
由此得到作法如下:
  1. \documentclass{article}
  2. \usepackage{tikz}
  3. \usetikzlibrary{calc}
  4. \begin{document}
  5. \def\bili{0.05}
  6. \tikz[x=\bili cm,y=\bili cm,line join=round]{
  7. \coordinate (O) at (0,0);
  8. \coordinate (A) at (-143,-24);
  9. \coordinate (B) at (32,-24);
  10. \coordinate (D) at (0,-24);
  11. \coordinate (D1) at ($(O)!(D)!(A)!-1!(D)$);
  12. \coordinate (D2) at ($(O)!(D)!(B)!-1!(D)$);
  13. \coordinate (C) at ($(D2)!-7cm*\bili!(B)$);
  14. \coordinate (D3) at ($(O)!(D2)!(C)!-1!(D2)$);
  15. \tikzset{amb/.style={auto=right,midway,black}}
  16. \draw[blue,thick]
  17. (D)--node[amb,swap]{24}
  18. (O)--node[amb,swap,pos=0.6,inner sep=1pt]{24}
  19. (D1)--node[amb]{143}
  20. (A)--node[amb]{143}
  21. (D)--node[amb]{32}
  22. (B)--node[amb,pos=0.4]{32}
  23. (D2)--node[amb,pos=0.2,inner sep=1pt]{7}
  24. (C)--node[amb,inner sep=1pt]{7}
  25. (D3)--node[amb,pos=0.4,inner sep=1pt]{24}
  26. (O)--node[amb,pos=0.45,inner sep=1pt]{24}
  27. (D2);
  28. \draw[blue,dashed](O)--(A)(O)--(B)(O)--(C);
  29. \foreach \i in {O,A,B,C} {\filldraw[fill=red] (\i) circle (1.5pt);}
  30. \foreach \i in {D,D1,D2,D3} {\filldraw[fill=red] (\i) circle (1pt);}
  31. }
  32. \end{document}
复制代码
效果如下:
QQ截图20200224162601.png
2020-2-24 16:26


当然,或许有更简单或现成的对称方法,但我没查到……
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
$\href{https://kuingggg.github.io/}{\text{About Me}}$

TOP

回复 2# isee

所以还是要事先做一些运算,当然这个好处是可以对整条曲线作对称。

PS、从链接里的回帖到现在,我依然没有抽空去搞清这些矩阵神马的东东[笑哭]

TOP

觉得画初中平面几何的图,tkz-euclide包最好用:
  1. \documentclass[a4paper]{article}
  2. \usepackage{amssymb,amsmath,amsthm}
  3. \usepackage{tkz-euclide}
  4. \usepackage{pgf,tikz,graphicx}
  5. \usepackage[slantfont,boldfont]{xeCJK}
  6. \punctstyle{kaiming}

  7. \begin{document}
  8. \begin{tikzpicture}[scale=0.8,label style/.style={font=\scriptsize}]
  9. \tkzDefPoints{14.3/2.4/O,0/0/A,14.3/0/B,17.5/0/C};
  10. \tkzDefPointBy[reflection = over O--A](B)\tkzGetPoint{B'}
  11. \tkzDefPointBy[reflection = over O--C](B)\tkzGetPoint{B''}
  12. \tkzDefPointWith[linear,K=39/32](C,B'')\tkzGetPoint{D}
  13. \tkzDefPointBy[reflection = over O--D](B'')\tkzGetPoint{B'''}
  14. \tkzDrawSegments[color=blue](O,A O,B O,C O,B' O,B'' O,B''' A,C C,D D,B''' A,B' O,D);
  15. \tkzLabelSegment[blue,left=1,pos=0.5,rotate=16](A,B'){$143$}
  16. %\tkzLabelPoints[above right][color=blue](O,A,B,C,D,B',B''');
  17. \end{tikzpicture}
  18. \end{document}
复制代码

TOP

回复 4# abababa

有空一定得学学(不知现在有英文或中文版本的手册没?

TOP

回复 5# kuing

手册还是没有英文的,不过我总结了一些常用的命令:
  1. \tkzDefMidPoint(A,B)\tkzGetPoint{C}%定义A,B中点C
  2. \tkzDefPointBy[rotation=center O angle -45](B)\tkzGetPoint{A}%将B点绕O顺时针旋转45度得到点A
  3. \tkzDefPointBy[projection=onto A--C](B)\tkzGetPoint{H}%过B作AC垂线,垂足为H
  4. \tkzDefPointBy[reflection = over A--B](C)\tkzGetPoint{C'}%作点C关于直线AB的对称点C'
  5. \tkzDefLine[parallel=through C](A,B)\tkzGetPoint{X}%过C作AB的平行线,并在其上取一点X
  6. \tkzDefLine[orthogonal=through P](A,B) \tkzGetPoint{X}%过P作AB的垂线,并在其上取一点X
  7. \tkzDefPointWith[linear,K=2](A,B)\tkzGetPoint{C}%定义点C,使得AC:AB = K
  8. \tkzInterLL(A,B)(C,D)\tkzGetPoint{E}%定义直线AB,CD的交点E
  9. \tkzInterLC(A,B)(O,C)\tkzGetFirstPoint{P}%定义直线AB与以O为圆心OC为半径的圆的第一个交点P
  10. \tkzInterLC(A,B)(O,C)\tkzGetSecondPoint{P}%定义直线AB与以O为圆心OC为半径的圆的第二个交点P
  11. \tkzDefLine[bisector](A,B,C)\tkzGetPoint{X}%定义角ABC的平分线上一点X
  12. \tkzOrthoCenter(A,B,C)\tkzGetPoint{H}%定义三角形ABC的垂心H
  13. \tkzCircumCenter(A,B,C)\tkzGetPoint{O}%定义三角形ABC的外心O
  14. \tkzInCenter(A,B,C)\tkzGetPoint{I}%定义三角形ABC的内心I
  15. \tkzTangent[at=A](O)%过圆O上一点A作圆O的切线
  16. \tkzTangent[from=P](O,A)\tkzGetPoints{B}{C}%过圆外一点P作以O为圆心OA为半径的圆的切线,取得两个切点B,C
  17. \tkzDefPointBy[inversion = center O through A](P)\tkzGetPoint{P'}%点P关于以O为圆心OA为半径的圆的反演点P'
  18. \tkzCalcLength(O,B)\tkzGetLength{r}%取得线段OB的长度,命名为 r,后面用 \r 引用此值
  19. \pgfmathparse{sin(\r)}\let\k\pgfmathresult;%对 \r 进行运算,结果命名为 \k
  20. \tkzMarkAngle[fill=dgreen, opacity=0.3, size=0.7](B,A,C)%标记角符号
  21. \tkzLabelAngle[color=dgreen, pos=1](B,A,C){$\alpha$}%命名角
复制代码

TOP

回复 6# abababa

TOP

回复 4# abababa

还有几个自定义的命令:
  1. %三角形第一个字母对应的旁心
  2. \def\tkzEsCenter(#1,#2,#3){
  3. \begingroup
  4.         \tkzDefPointWith[linear,K=2](#1,#2)\tkzGetPoint{tkz@ib}
  5.         \tkzDefPointWith[linear,K=2](#1,#3)\tkzGetPoint{tkz@ic}
  6.         \tkzDefBisectorLine(tkz@ib,#2,#3) \tkzGetPoint{tkz@ib}
  7.         \tkzDefBisectorLine(tkz@ic,#3,#2)\tkzGetPoint{tkz@ic}
  8.         \tkzInterLL(#2,tkz@ib)(#3,tkz@ic)
  9. \endgroup
  10. }
  11. %三角形重心
  12. \def\tkzBaryCenter(#1,#2,#3){
  13. \begingroup
  14.         \tkzDefMidPoint(#1,#2)\tkzGetPoint{tkz@pa}
  15.         \tkzDefMidPoint(#2,#3)\tkzGetPoint{tkz@pb}
  16.         \tkzInterLL(#3,tkz@pa)(#1,tkz@pb)
  17. \endgroup
  18. }
复制代码
用的时候像这样:
  1. \tkzBaryCenter(A,B,C)\tkzGetPoint{G}%定义三角形ABC的重心G
复制代码

TOP

回复 8# abababa

重心倒是可以利用 tikz 提供的质心坐标系来弄在手册搜 barycentric 看用法

TOP

回复 9# kuing

我从最开始就没仔细用过 tikz,都是从GeoGebra里导出的,然后觉得那个代码太乱了,也看不懂,就觉得能不能从GeoGebra的命令里提练出一种画图的包,因为GeoGebra就是从一个一个命令画出来的图,既然能导出tikz肯定也能导出它自己的更上层的命令。然后就有人给我推荐了tkz-euclide,马上就用上了,非常好用。

TOP

现在tkz-euclide的3.06c,文档已经变成英文的了,有些命令改了,比如那个\tkzTangent,改成\tkzDefTangent了,多了一个Def,我目前编译时就遇到这一个需要改动的命令,其它的都和以前一样。

还有重心也定义了:
\tkzDefBarycentricPoint
参数可以是两个点或者三个点,都能定义重心。

旁心好像是:
\tkzDefPoints{ 0/0/A,4/0/B,0.8/4/C}
\tkzDefCircle[ex](B,C,A)
\tkzGetPoint{J_c}
这样来定义旁心J_c,还没尝试不知道对不对。

网址:
http://altermundus.fr/includes/fichiers.php

下面有3.06c的文档,很全。

TOP

返回列表 回复 发帖