明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6311|回复: 15

[基础] 关于在三角形内画内切圆的难题

  [复制链接]
发表于 2010-7-15 09:45:00 | 显示全部楼层 |阅读模式

    教材中一道题是,选取三角形三边后,自动求出三角形面积,同时画出三角形的内切圆。

 

求面积我已经完成,内切圆实在没办法,在CAD中我试验了下,可以用画圆--3p--设置捕捉模式为切点---选三边后即可实现三角形内切圆。

但是不知道怎么用代码实现,请高人指点迷津。

 

(defun c:t80-1()
  (setq len1 (getlen ent1))
  (setq len2 (getlen ent2))
  (setq len3 (getlen ent3)) 
  (setq ss (area3 len1 len2 len3))
  (alert (strcat "三角形的面积=" (rtos ss)))
  (prin1)
)
  (defun getlen(ent)
    (setq ent (entsel "请选择三角形的一条边:"))
    (command "lengthen" ent "")
    (getvar "perimeter")
    )
  (defun area3(a b c)
    (setq s (* (+ a b c) 0.5))
    (sqrt (* s (- s a) (- s b) (- s c)))
    )
  (prompt "<t80-1>量取三角形三边后自动求出面积")
(prin1)

发表于 2010-7-15 10:06:00 | 显示全部楼层
角平分线的交点即是内切圆的圆心
 楼主| 发表于 2010-7-15 11:01:00 | 显示全部楼层
问题是怎么求角平分线,另外求的圆心后半径如何确定啊
发表于 2010-7-15 13:25:00 | 显示全部楼层
求角平分线 可参考 Bisect.Lsp (Google ....)
剩下的三角解题了
发表于 2010-7-15 14:53:00 | 显示全部楼层
  1. (defun c:test(/ A B C J2X J2Y J3X J3Y P1 P2 P3 PT RAD X1 X2 X3 Y1 Y2 Y3)
  2.   (setq p1 (getpoint "\n输入第一点:"))
  3.   (setq p2 (getpoint "\n输入第二点:"))
  4.   (setq p3 (getpoint "\n输入第三点:"))
  5.   (if (not (and p1 p2 p3))
  6.     (exit)
  7.   )
  8.   (setq p1 (trans p1 1 0))
  9.   (setq p2 (trans p2 1 0))
  10.   (setq p3 (trans p3 1 0))
  11.   (setq x1 (car p1)
  12. y1 (cadr p1)
  13. x2 (car p2)
  14. y2 (cadr p2)
  15. x3 (car p3)
  16. y3 (cadr p3)
  17.   )
  18.   (setq a (distance p2 p3))
  19.   (setq b (distance p3 p1))
  20.   (setq c (distance p1 p2))
  21.   (setq j2x (/ (+ (* a x1)(* c x3)) (+ a c))
  22. j2y (/ (+ (* a y1)(* c y3)) (+ a c))
  23. j3x (/ (+ (* a x1)(* b x2)) (+ a b))
  24. j3y (/ (+ (* a y1)(* b y2)) (+ a b))
  25.   )
  26.   (setq rad (abs (/ (det p1 p2 p3) (+ a b c))))
  27.   (setq pt (inters p2 (list j2x j2y) p3 (list j3x j3y)))
  28.   (make-line p1 p2)
  29.   (make-line p2 p3)
  30.   (make-line p3 p1)
  31.   (make-circle pt rad)
  32.   (princ)
  33. )
  34. (defun make-line(p q)
  35.   (entmake
  36.     (list
  37.       '(0 . "LINE")
  38.       (cons 10 p)
  39.       (cons 11 q)
  40.     )
  41.   )
  42. )
  43. (defun make-circle(cen rad)
  44.   (entmake
  45.     (list
  46.       '(0 . "CIRCLE")
  47.       (cons 10 cen)
  48.       (cons 40 rad)
  49.     )
  50.   )
  51. )
  52. ;;定义三点的行列式,即三点之倍面积
  53. (defun det (p1 p2 p3 / x2 y2)
  54.   (setq x2 (car p2)
  55. y2 (cadr p2)
  56.   )
  57.   (- (* (- x2 (car p3)) (- y2 (cadr p1)))
  58.      (* (- x2 (car p1)) (- y2 (cadr p3)))
  59.   )
  60. )
 楼主| 发表于 2010-7-15 15:13:00 | 显示全部楼层
谢谢楼上的代码,实现了功能。同时感谢大家的帮助。
 楼主| 发表于 2010-7-15 16:02:00 | 显示全部楼层

(setq j2x (/ (+ (* a x1)(* c x3)) (+ a c))

 

这句代码的计算式看不懂啊,请讲一下吧。关系到三角形几何关系吗

发表于 2010-7-15 17:09:00 | 显示全部楼层

利用角平分线定理,设角平分线为AE,   则有 AB/AC = BE/CE,然后按照这个分比,求出坐标。

内切圆的半径等于 面积的2倍除以周长。

至于圆心的求法有很多种,我这里仅仅是一种。楼主可以自己思考怎么求。

 楼主| 发表于 2010-7-15 17:41:00 | 显示全部楼层

呵呵,楼上的知识渊博,敬仰。学习了,谢谢

(setq p1 (trans p1 1 0))在本代码中具体起什么作用,看帮助是转换坐标系

 

 

角平分线的定义  ■ 角平分线的定义:从一个角的顶点引出一条射线,把这个角分成两个相等的角,这条射线叫做这个角的角平分线。

  ■ 三角形的角平分线定义:三角形顶点到其内角的角平分线交对边的点连的一条线段,叫三角形的角平分线。

  【注】三角形的角平分线不是角的平分线,是线段。角的平分线是射线。

  ■拓展:三角形的三条角平分线相交于一点,并且这一点到三条边的距离相等!(即内心)。

  ■定理1:在角平分线上的任意一点到这个角的两边距离相等。

  ■逆定理:在一个角的内部(包括顶角),且到这个角的两边距离相等的点在这个角的角平分线上。

  ■定理2:三角形一个角的平分线分对边所成的两条线段与这个角的两邻边对应成比例,

  如:在△ABC中,BD平分∠ABC,则AD:DC=AB:BC

发表于 2010-7-15 21:37:00 | 显示全部楼层
(defun c:tt ()
  (command "circle" "3p" "tan" pause "tan" pause "tan" pause)
  (princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-23 17:48 , Processed in 0.190479 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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