chenmik 发表于 2023-4-16 12:46:05

求作已知三角形的内接直角三角形

网上看到的一道题。


mahuan1279 发表于 2023-4-19 13:11:33

本帖最后由 mahuan1279 于 2023-4-19 13:27 编辑

原来是调和点列的性质。

飞雪神光 发表于 2023-4-16 21:55:36

按照楼上大佬思路写的
(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)
        (defun BF-curve-subsegment-picked-Points (obj p)
                (BF-curve-subsegment-points
                        obj
                        (fix
                                (vlax-curve-getParamAtPoint
                                        obj
                                        (vlax-curve-getClosestPointTo obj (trans p 1 0))
                                )
                        )
                )
        )
        (defun BF-curve-subsegment-points (curve n)
                (list       
                        (lm-3d2d(vlax-curve-getPointAtParam curve (fix n)))
                        (lm-3d2d(vlax-curve-getPointAtParam curve (1+ (fix n))))
                )
        )
        (defun lm-3d2d (pt) (mapcar '+ '(0 0) pt))
(defun lm-entmake-pline (pldata / a s1 ptlst bihe co tc)
                (mapcar'set '(ptlst bihe co tc) pldata)
                (or co (setq co 256))
                (or tc (setq tc (getvar "clayer")))
                (entmake (append (list
                                                                                       '(0 . "LWPOLYLINE")
                                                                                       '(100 . "AcDbEntity")
                                                                                       '(100 . "AcDbPolyline")
                                                                                       (cons 62 co)
                                                                                       (cons 8 tc)
                                                                                       (cons 90 (length ptlst))
                                                                                       (cons 70 (if bihe 1 0))
                                                                                       (cons 38 (if (setq h(nth 2 (car ptlst))) h 0))
                                                                               )
                                                       (mapcar '(lambda (a) (cons 10 a)) ptlst))
                )
                (entlast)
        )
        (setq ty (car(entsel "选择三角形多段线:")))
        (setq pts1(mapcar 'cdr (vl-remove-if-not '(lambda(x) (= (car x) 10) ) (entget ty))))
        (setq pt (getpoint "\n指定D点:"))
        (setq pts2(vl-sort (BF-curve-subsegment-picked-Points ty pt) '(lambda (p1 p2)(< (car p1) (car p2)))))
        (foreach x pts2 (setq pts1(vl-remove x pts1)))
        (setq
                pt1(car pts2)
                pt2(cadr pts2)
                pt3(car pts1)
                an1(angle pt pt1)
                h(distance pt pt3)
                b(distance pt pt1)
                c(distance pt pt2)
        )
        (setq gs1+(* h (+ (* 3.0 c) b (sqrt (* (+ b c (/ (* 2.0 b c) h)) (+ b c (- (/ (* 2.0 b c) h))))))))
        (setq gs1-(* h(+ (* 3.0 c) b (- (sqrt (* (+ b c (/ (* 2.0 b c) h)) (+ b c (- (/ (* 2.0 b c) h)))))))))
        (setq gs2(+ (/ (* 2 b c) h) (/ (* 4 h c) b) (* 2 h)))
        (setq x1 (/ gs1+ gs2))
        (setq x2 (/ gs1- gs2))
        (setq ptx(polar pt an1 x1))
        (setq jd1(inters ptx (polar ptx (+ an1 (* pi 0.5)) 0.5) pt1 pt3 nil))
        (setq an(- (angle pt jd1) (* pi 0.5)))
        (setq jd2(inters pt (polar pt an 0.5) pt2 pt3 nil))
        (lm-entmake-pline(list (list pt jd1 jd2) t 4))
        (setq ptx(polar pt pi x2))
        (setq jd1(inters ptx (polar ptx (+ an1(* pi 0.5)) 0.5) pt1 pt3 nil))
        (setq an(- (angle pt jd1) (* pi 0.5)))
        (setq jd2(inters pt (polar pt an 0.5) pt2 pt3 nil))
        (lm-entmake-pline(list (list pt jd1 jd2) t 3))
        ;(entmake (list '(0 . "CIRCLE")'(100 . "AcDbEntity")'(100 . "AcDbCircle")(cons 62 1)(cons 10 pt)(cons 40 x1)))
        ;(entmake (list '(0 . "CIRCLE")'(100 . "AcDbEntity")'(100 . "AcDbCircle")(cons 62 2)(cons 10 pt)(cons 40 x2)))
        (princ)
)

mahuan1279 发表于 2023-4-16 15:40:17

本帖最后由 mahuan1279 于 2023-4-16 19:24 编辑

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

chenjun_nj 发表于 2023-4-18 08:27:46


mahuan1279 发表于 2023-4-18 10:53:55

chenjun_nj 发表于 2023-4-18 08:27


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

chenmik 发表于 2023-4-18 12:22:47

多谢各位大神的解答。这道作图题改编于下面这道证明题。我所知道的证法有点繁琐,各位大神有兴趣的也可证一下,看是否有更简洁的。


chenjun_nj 发表于 2023-4-18 13:05:59

mahuan1279 发表于 2023-4-18 10:53
再进一步,若AM/MD=n(n不等于1),还能做吗?

如果AM/MD=2,那么只要把我的作图法中的圆半径改为AD/4并与AB相切,其他步骤一样,其他的n应该是同样的规律,我还没摸清楚。

chenjun_nj 发表于 2023-4-18 16:49:54

mahuan1279 发表于 2023-4-18 10:53
再进一步,若AM/MD=n(n不等于1),还能做吗?

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

mahuan1279 发表于 2023-4-19 08:04:02

本帖最后由 mahuan1279 于 2023-4-19 08:30 编辑

chenjun_nj 发表于 2023-4-18 16:49
解出来了,AM:MD=n
在AD上取点P,使AD:PD=2*n,以P为圆心,PD为半径作圆,
其他作法不变。
怎么证明呢?
页: [1] 2 3 4 5
查看完整版本: 求作已知三角形的内接直角三角形