【求助】 自行调整面积
跟各位大佬请教一下,如果我任意画了一个闭合的多边形,假设查看其面积为8653.31。我想输入一个指定的面积,并选择一个指定的顶点让该顶点自行调整,使得调整后的多边形面积与输入的面积相等。想达到这样的效果该往哪方面考虑呢?调整顶点在高线 上的位置即可 我也想实现这个功能,但是不知道如何实现 一个边还可以平移,一个点怎么调整啊?原则是什么 1.用entsel点取指定顶点,获取多段线同时获取指定顶点坐标(离点取点最近的点);
2.获取多段线面积,如果输入面积大于多段线面积则多段线外扩否则内收;
3.外扩或内收的一个思路是可以先获取多段线质量中点,连接质量中点和指定顶点生成一直线,则不管外扩或者内收后的新顶点都在这条直线上,然后循环在这条直线上每次步进一个值,生成新顶点,不断测试新的多段线面积是否满足要求,满足要求则退出循环(适合比较规则的多段线,如果是复杂多段线质心不在多段线内部的就不行);
4,理论上来说只要输入的步进值足够小,是可以得出一条很接近输入面积的多段线,但是步进值越小程序运行时间会越长,另外一个思路是输入一个允许容差值,当新生成多段线面积与输入面积之间的差值小于等于容差值时则认为满足要求。 1、取得多边开面积M;2、求多边形面积与设定面积的比例K;3、确定基准P;4、以P为基准点按K值缩放多边形。 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=169139&highlight=%B5%E3%2B%C3%E6%BB%FD&_dsign=f6b96f4d 以该点的两相邻点的距离为底(三角形底边),调整该点到底的距离,使三角形的面积变化正好等于目标面积与原多边形的面积差。
;|
(abc (setq s1 (car (entsel "\n选择多段线: ")))
(setq p0 (getpoint "\n缩放基点<退出>: "))
2000000
)
|;
(defun abc (pl pt aa / a0 ob sc)
"多段线缩放到指定面积"
(setq a0 (vla-Get-area (setq ob (vlax-ename->vla-object pl)))
sc (sqrt (/ aa a0 1.))
)
(command "Scale" pl "" "non" pt sc)
)
页:
[1]