关于在三角形内画内切圆的难题
<p> 教材中一道题是,选取三角形三边后,自动求出三角形面积,同时画出三角形的内切圆。</p><p> </p>
<p>求面积我已经完成,内切圆实在没办法,在CAD中我试验了下,可以用画圆--3p--设置捕捉模式为切点---选三边后即可实现三角形内切圆。</p>
<p>但是不知道怎么用代码实现,请高人指点迷津。</p>
<p> </p>
<p><font face="Verdana">(defun c:t80-1()<br/> (setq len1 (getlen ent1))<br/> (setq len2 (getlen ent2))<br/> (setq len3 (getlen ent3)) <br/> (setq ss (area3 len1 len2 len3))<br/> (alert (strcat "三角形的面积=" (rtos ss)))<br/> (prin1)<br/>)<br/> (defun getlen(ent)<br/> (setq ent (entsel "请选择三角形的一条边:"))<br/> (command "lengthen" ent "")<br/> (getvar "perimeter")<br/> )<br/> (defun area3(a b c)<br/> (setq s (* (+ a b c) 0.5))<br/> (sqrt (* s (- s a) (- s b) (- s c)))<br/> )<br/> (prompt "<t80-1>量取三角形三边后自动求出面积")<br/>(prin1)</font></p> <font style="BACKGROUND-COLOR: #ffffff" face="Verdana">角平分线的交点即是内切圆的圆心</font> 问题是怎么求角平分线,另外求的圆心后半径如何确定啊 <font style="BACKGROUND-COLOR: #ffffff" face="Verdana">求角平分线 可参考 Bisect.Lsp (Google ....)<br/>剩下的三角解题了</font>
(defun c:test(/ A B C J2X J2Y J3X J3Y P1 P2 P3 PT RAD X1 X2 X3 Y1 Y2 Y3)
(setq p1 (getpoint "\n输入第一点:"))
(setq p2 (getpoint "\n输入第二点:"))
(setq p3 (getpoint "\n输入第三点:"))
(if (not (and p1 p2 p3))
(exit)
)
(setq p1 (trans p1 1 0))
(setq p2 (trans p2 1 0))
(setq p3 (trans p3 1 0))
(setq x1 (car p1)
y1 (cadr p1)
x2 (car p2)
y2 (cadr p2)
x3 (car p3)
y3 (cadr p3)
)
(setq a (distance p2 p3))
(setq b (distance p3 p1))
(setq c (distance p1 p2))
(setq j2x (/ (+ (* a x1)(* c x3)) (+ a c))
j2y (/ (+ (* a y1)(* c y3)) (+ a c))
j3x (/ (+ (* a x1)(* b x2)) (+ a b))
j3y (/ (+ (* a y1)(* b y2)) (+ a b))
)
(setq rad (abs (/ (det p1 p2 p3) (+ a b c))))
(setq pt (inters p2 (list j2x j2y) p3 (list j3x j3y)))
(make-line p1 p2)
(make-line p2 p3)
(make-line p3 p1)
(make-circle pt rad)
(princ)
)
(defun make-line(p q)
(entmake
(list
'(0 . "LINE")
(cons 10 p)
(cons 11 q)
)
)
)
(defun make-circle(cen rad)
(entmake
(list
'(0 . "CIRCLE")
(cons 10 cen)
(cons 40 rad)
)
)
)
;;定义三点的行列式,即三点之倍面积
(defun det (p1 p2 p3 / x2 y2)
(setq x2 (car p2)
y2 (cadr p2)
)
(- (* (- x2 (car p3)) (- y2 (cadr p1)))
(* (- x2 (car p1)) (- y2 (cadr p3)))
)
)
谢谢楼上的代码,实现了功能。同时感谢大家的帮助。 <p>(setq j2x (/ (+ (* a x1)(* c x3)) (+ a c))</p>
<p> </p>
<p>这句代码的计算式看不懂啊,请讲一下吧。关系到三角形几何关系吗</p> <p>利用角平分线定理,设角平分线为AE, 则有 AB/AC = BE/CE,然后按照这个分比,求出坐标。</p>
<p>内切圆的半径等于 面积的2倍除以周长。</p>
<p>至于圆心的求法有很多种,我这里仅仅是一种。楼主可以自己思考怎么求。</p> <p>呵呵,楼上的知识渊博,敬仰。学习了,谢谢</p>
<p>(setq p1 (trans p1 1 0))在本代码中具体起什么作用,看帮助是转换坐标系</p>
<p> </p>
<p> </p>
<p>角平分线的定义 ■ <a href="http://baike.baidu.com/view/335273.htm" target="_blank">角平分线</a>的定义:从一个角的顶点引出一条射线,把这个角分成两个相等的角,这条射线叫做这个角的角平分线。 </p>
<div class="spctrl"></div>
<p> ■ <a href="http://baike.baidu.com/view/5670.htm" target="_blank">三角形</a>的角平分线定义:三角形顶点到其内角的角平分线交对边的点连的一条线段,叫三角形的角平分线。 </p>
<div class="spctrl"></div>
<p> 【注】三角形的角平分线不是角的平分线,是线段。角的平分线是射线。 </p>
<div style="WIDTH: 200px; FLOAT: right; VISIBILITY: visible" class="text_pic"><a href="http://baike.baidu.com/image/09bb4f3d5aa3f8c33d6d97c7" target="_blank"><img class="editorImg" title="" src="http://imgsrc.baidu.com/baike/abpic/item/09bb4f3d5aa3f8c33d6d97c7.jpg"/></a></div>
<div class="spctrl"></div>
<p> ■拓展:三角形的三条角平分线相交于一点,并且这一点到三条边的距离相等!(即<a href="http://baike.baidu.com/view/358574.htm" target="_blank">内心</a>)。 </p>
<div class="spctrl"></div>
<p> ■定理1:在角平分线上的任意一点到这个角的两边距离相等。 </p>
<div class="spctrl"></div>
<p> ■逆定理:在一个角的内部(包括顶角),且到这个角的两边距离相等的点在这个角的角平分线上。 </p>
<div class="spctrl"></div>
<p> ■定理2:三角形一个角的平分线分对边所成的两条线段与这个角的两邻边对应成比例, </p>
<div class="spctrl"></div>
<p> 如:在△ABC中,BD平分∠ABC,则AD:DC=AB:BC</p> (defun c:tt ()<br/> (command "circle" "3p" "tan" pause "tan" pause "tan" pause)<br/> (princ)<br/>)
页:
[1]
2