明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3257|回复: 66

[几何作图] 求作已知三角形的内接直角三角形

  [复制链接]
发表于 2023-4-16 12:46 | 显示全部楼层 |阅读模式
网上看到的一道题。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 金钱 +21 收起 理由
qjchen + 1 + 21 赞一个!

查看全部评分

发表于 2023-4-19 13:11 | 显示全部楼层
本帖最后由 mahuan1279 于 2023-4-19 13:27 编辑

原来是调和点列的性质。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 金钱 +15 收起 理由
qjchen + 1 + 15 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-16 21:55 | 显示全部楼层
按照楼上大佬思路写的
  1. (defun c:tt(/ an b bf-curve-subsegment-picked-points bf-curve-subsegment-points c gs1- gs1+ gs2 h jd1 jd2 lm-3d2d lm-entmake-pline pt pt1 pt2 pt3 pts1 pts2 ptx ty x1 x2)
  2.         (defun BF-curve-subsegment-picked-Points (obj p)
  3.                 (BF-curve-subsegment-points
  4.                         obj
  5.                         (fix
  6.                                 (vlax-curve-getParamAtPoint
  7.                                         obj
  8.                                         (vlax-curve-getClosestPointTo obj (trans p 1 0))
  9.                                 )
  10.                         )
  11.                 )
  12.         )
  13.         (defun BF-curve-subsegment-points (curve n)
  14.                 (list       
  15.                         (lm-3d2d(vlax-curve-getPointAtParam curve (fix n)))
  16.                         (lm-3d2d(vlax-curve-getPointAtParam curve (1+ (fix n))))
  17.                 )
  18.         )
  19.         (defun lm-3d2d (pt) (mapcar '+ '(0 0) pt))
  20.   (defun lm-entmake-pline (pldata / a s1 ptlst bihe co tc)
  21.                 (mapcar'set '(ptlst bihe co tc) pldata)
  22.                 (or co (setq co 256))
  23.                 (or tc (setq tc (getvar "clayer")))
  24.                 (entmake (append (list
  25.                                                                                          '(0 . "LWPOLYLINE")
  26.                                                                                          '(100 . "AcDbEntity")
  27.                                                                                          '(100 . "AcDbPolyline")
  28.                                                                                          (cons 62 co)
  29.                                                                                          (cons 8 tc)
  30.                                                                                          (cons 90 (length ptlst))
  31.                                                                                          (cons 70 (if bihe 1 0))
  32.                                                                                          (cons 38 (if (setq h(nth 2 (car ptlst))) h 0))
  33.                                                                                  )
  34.                                                          (mapcar '(lambda (a) (cons 10 a)) ptlst))
  35.                 )
  36.                 (entlast)
  37.         )
  38.         (setq ty (car(entsel "选择三角形多段线:")))
  39.         (setq pts1(mapcar 'cdr (vl-remove-if-not '(lambda(x) (= (car x) 10) ) (entget ty))))
  40.         (setq pt (getpoint "\n指定D点:"))
  41.         (setq pts2(vl-sort (BF-curve-subsegment-picked-Points ty pt) '(lambda (p1 p2)(< (car p1) (car p2)))))
  42.         (foreach x pts2 (setq pts1(vl-remove x pts1)))
  43.         (setq
  44.                 pt1(car pts2)
  45.                 pt2(cadr pts2)
  46.                 pt3(car pts1)
  47.                 an1(angle pt pt1)
  48.                 h(distance pt pt3)
  49.                 b(distance pt pt1)
  50.                 c(distance pt pt2)
  51.         )
  52.         (setq gs1+(* h (+ (* 3.0 c) b (sqrt (* (+ b c (/ (* 2.0 b c) h)) (+ b c (- (/ (* 2.0 b c) h))))))))
  53.         (setq gs1-(* h(+ (* 3.0 c) b (- (sqrt (* (+ b c (/ (* 2.0 b c) h)) (+ b c (- (/ (* 2.0 b c) h)))))))))
  54.         (setq gs2(+ (/ (* 2 b c) h) (/ (* 4 h c) b) (* 2 h)))
  55.         (setq x1 (/ gs1+ gs2))
  56.         (setq x2 (/ gs1- gs2))
  57.         (setq ptx(polar pt an1 x1))
  58.         (setq jd1(inters ptx (polar ptx (+ an1 (* pi 0.5)) 0.5) pt1 pt3 nil))
  59.         (setq an(- (angle pt jd1) (* pi 0.5)))
  60.         (setq jd2(inters pt (polar pt an 0.5) pt2 pt3 nil))
  61.         (lm-entmake-pline(list (list pt jd1 jd2) t 4))
  62.         (setq ptx(polar pt pi x2))
  63.         (setq jd1(inters ptx (polar ptx (+ an1(* pi 0.5)) 0.5) pt1 pt3 nil))
  64.         (setq an(- (angle pt jd1) (* pi 0.5)))
  65.         (setq jd2(inters pt (polar pt an 0.5) pt2 pt3 nil))
  66.         (lm-entmake-pline(list (list pt jd1 jd2) t 3))
  67.         ;(entmake (list '(0 . "CIRCLE")'(100 . "AcDbEntity")'(100 . "AcDbCircle")(cons 62 1)(cons 10 pt)(cons 40 x1)))
  68.         ;(entmake (list '(0 . "CIRCLE")'(100 . "AcDbEntity")'(100 . "AcDbCircle")(cons 62 2)(cons 10 pt)(cons 40 x2)))
  69.         (princ)
  70. )

评分

参与人数 1明经币 +1 金钱 +30 收起 理由
chenmik + 1 + 30 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-16 15:40 | 显示全部楼层
本帖最后由 mahuan1279 于 2023-4-16 19:24 编辑

以D为坐标原点建立直角坐标,求出距离X。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 金钱 +30 收起 理由
chenmik + 1 + 30 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-18 08:27 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 5明经币 +4 金钱 +105 收起 理由
highflybird + 1 + 30 很给力!
qjchen + 2 + 15 很给力!
chenmik + 50 解得漂亮!
guosheyang + 1 很给力!
mahuan1279 + 10 很给力!

查看全部评分

发表于 2023-4-18 10:53 | 显示全部楼层

再进一步,若AM/MD=n(n不等于1),还能做吗?

点评

感觉有难度。  发表于 2023-4-18 12:11
 楼主| 发表于 2023-4-18 12:22 | 显示全部楼层
多谢各位大神的解答。这道作图题改编于下面这道证明题。我所知道的证法有点繁琐,各位大神有兴趣的也可证一下,看是否有更简洁的。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-4-18 13:05 | 显示全部楼层
mahuan1279 发表于 2023-4-18 10:53
再进一步,若AM/MD=n(n不等于1),还能做吗?

如果AM/MD=2,那么只要把我的作图法中的圆半径改为AD/4并与AB相切,其他步骤一样,其他的n应该是同样的规律,我还没摸清楚。
发表于 2023-4-18 16:49 | 显示全部楼层
mahuan1279 发表于 2023-4-18 10:53
再进一步,若AM/MD=n(n不等于1),还能做吗?

解出来了,AM:MD=n
在AD上取点P,使AD:PD=2*n,以P为圆心,PD为半径作圆,
其他作法不变。

评分

参与人数 1金钱 +10 收起 理由
mahuan1279 + 10 漂亮的通姐!

查看全部评分

发表于 2023-4-19 08:04 | 显示全部楼层
本帖最后由 mahuan1279 于 2023-4-19 08:30 编辑
chenjun_nj 发表于 2023-4-18 16:49
解出来了,AM:MD=n
在AD上取点P,使AD:PD=2*n,以P为圆心,PD为半径作圆,
其他作法不变。

怎么证明呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-26 20:24 , Processed in 0.431605 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表