明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2538|回复: 22

[自我挑战] 大矩形内接小矩形,已知小矩形一条边长,求另一条边长。

[复制链接]
发表于 2022-9-23 10:37:23 | 显示全部楼层 |阅读模式

大矩形高宽已知,其内部有一斜置的内接小矩形,小矩形的一条边长已知,求另一边长。(以上条件都确定时,小矩形应该只存在唯一的放置位置。)

这很久之前遇到的一个问题,当时觉得挺难,所以没去苛求数学方法。是用的LISP,做的近似求解。不知道社区里有没有师傅有兴趣数学解一下这个问题。

本帖子中包含更多资源

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

x
发表于 2022-9-23 17:40:47 | 显示全部楼层
接上图,要求的边长长度A,可以通过大矩形减4个三角新面积计算,即:A*B=W*H-三角形1的面积*2-三角形2的面积*2 --> A*B=W*H-x1*y1/2*2-(W-x1)*(H-y1)*/2*2--> A=(W*y1+H*x1-2*x1*y1)/B
上面公式有2个变量 x1、y1 需要代入,依靠下面2公式计算

1:三角形1的是直角三角形:B*B=x1*x1+y1*y1;
2:三角形1、2成比例:y1/x1=(W-x1)/(H-y1)
回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-23 19:14:37 | 显示全部楼层
本帖最后由 highflybird 于 2022-9-23 19:16 编辑

这个是lisp求解示例代码:
这个解是精确解,不是迭代法。
  1. (defun c:test (/ A B C D H HP L M N P0 P1 P2 P3 P4 P5 P6 P7 S W X Y)
  2.   (initget 9)
  3.   (setq W (getdist "\n宽:"))
  4.   (initget 9)
  5.   (setq H (getdist "\n高:"))
  6.   (initget 9)
  7.   (setq L (getdist "\n边:"))
  8.   (setq m (/ W L))
  9.   (setq n (/ H L))
  10.   (setq A (* -4 n))
  11.   (setq B (+ (* n n) (* m m) -4))
  12.   (setq C (+ n n))
  13.   (setq D (- 1 (* m m)))

  14.   (setq S nil)
  15.   (foreach n (Math:quartic_Equation 4 A B C D)
  16.     (setq x (car n))
  17.     (setq y (cadr n))
  18.     (if  (and (equal y 0 1e-6) (> x 0))
  19.       (setq s (cons (* x L) s))
  20.     )
  21.   )
  22.   (princ "\n解是:")
  23.   (princ s)
  24.   (initget 9)
  25.   (setq HP (* 0.5 pi))
  26.   (setq p0 (getpoint "\n插入点:"))
  27.   (setq p1 (polar p0 pi W))
  28.   (setq p2 (polar p0 HP H))
  29.   (setq p3 (polar p2 pi W))
  30.   (Ent:Make_LWPoly (list p0 p1 p3 p2) T)
  31.   (foreach x S
  32.     (setq y (sqrt (- (* L L) (* x x))))
  33.     (setq p4 (polar p0 HP x))
  34.     (setq p5 (polar p0 pi y))
  35.     (setq p6 (polar p3 HP (- x)))
  36.     (setq p7 (polar p3 0 y))
  37.     (Ent:Make_LWPoly (list p4 p5 p6 p7) T)
  38.   )
  39.   (princ)
  40. )

  41. (defun Ent:Make_LWPoly (pts closed /)
  42.   (entmakeX                                             
  43.     (vl-list*
  44.       '(0 . "LWPOLYLINE")
  45.       '(100 . "AcDbEntity")
  46.       '(100 . "AcDbPolyline")
  47.       (cons 90 (length pts))                                        ;顶点个数
  48.       (cons 70 (if closed 1 0))                                        ;闭合的
  49.       (mapcar (function (lambda (x) (cons 10 x))) pts)          ;多段线顶点
  50.     )
  51.   )
  52. )


发表于 2022-9-23 11:12:09 | 显示全部楼层
本帖最后由 ssyfeng 于 2022-9-23 11:13 编辑

如果只是知道小矩形一条边的长度,而不是一条边的具体坐标,应该不是唯一解吧
发表于 2022-9-23 12:27:21 | 显示全部楼层
本帖最后由 vitalgg 于 2022-9-23 16:43 编辑

特殊情况下有解
 楼主| 发表于 2022-9-23 13:10:15 | 显示全部楼层
ssyfeng 发表于 2022-9-23 11:12
如果只是知道小矩形一条边的长度,而不是一条边的具体坐标,应该不是唯一解吧

是唯一解,可以理解为一个方形盒子内放一个宽度确定的木条,最长可以放多长。
发表于 2022-9-23 13:35:36 | 显示全部楼层
本帖最后由 liuhe 于 2022-9-23 13:37 编辑

11111111111111111111
发表于 2022-9-23 13:36:48 | 显示全部楼层
本帖最后由 liuhe 于 2022-9-23 13:38 编辑

四个方程,三个未知数,会解方程就行
X12/+Y12/=B2/
X22/+Y22/=L2/
X1+X2=W
Y1+Y2=H
arctan(Y2/X2)+arctan(Y1/X1)=90

最后一个方程最重要,隐藏的J1+J2=90

本帖子中包含更多资源

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

x
 楼主| 发表于 2022-9-23 13:45:16 | 显示全部楼层
哦,是啊,最后一个是关键。看起来是这样,我下午来验证
一下。
发表于 2022-9-23 15:34:59 | 显示全部楼层
这个最后的解是一元四次方程,所以无法通过作图法实现。这个题目应该和晓东多年前的作图题类似,就是筷子放入杯子的问题。
发表于 2022-9-23 15:38:06 | 显示全部楼层
本帖最后由 mahuan1279 于 2022-9-23 15:42 编辑

解四次方程。

本帖子中包含更多资源

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

x
 楼主| 发表于 2022-9-23 15:40:18 | 显示全部楼层
本帖最后由 飞的鱼儿 于 2022-9-23 15:43 编辑
highflybird 发表于 2022-9-23 15:34
这个最后的解是一元四次方程,所以无法通过作图法实现。这个题目应该和晓东多年前的作图题类似,就是筷子放 ...

是的,当年我好象是就是做到一元四次方程,解不出来了。:Q,其实这也是来自一个应用实例,就是在一定的矩形空间里放置,某种宽度的型材。需要先算出型材长度,截取下料。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 22:23 , Processed in 0.191514 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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