多边形切割
geogebra吧
全部回复
仅看楼主
level 11
如图,如何用线段或者直线HM把多边形切割成两部分?
(多边形顶点坐标略去)
p1 = 多边形(A, B, C, D, E, F, G)
H = (-5.54802, -2.84714)
M = (1.41735, 2.14021)
h = 线段(H, M)
在多边形外描一点,与线段组成一个矩形:
J = (-0.80837, -3.67539)
i = 距离(J, 直线(H, M))
u = i 单位法向量(h)
I = H - u
K = M - u
q1 = 多边形({H, M, K, I})
再做一个以HM为对称轴的矩形:
q2 = 对称(q1, h)
两矩形以盖住多边形为准,可以拖动J点调整,然后分别用这两矩形与多边形相交,所得图形为所求:
poly1 = 相交路径(p1, q1)
poly2 = 相交路径(p1, q2)
2021年03月16日 15点03分 1
level 11
继续讨论多边形切割,如果切割线是曲线呢?如下图:
l1 = {A, B, C, D, E, F, G}
poly1 = 多边形(l1)
H = 内点(poly1)
I = (-0.51543, 0.97777)
J = (-0.7671, 0.53142)
K = (-0.85732, 0.09931)
L = (-0.82883, -0.27582)
M = 内点(poly1)
l3 = {H, I, J, K, L, M}
e = 样条曲线(l3, 3)
这时候,我们可以换一种思路,给多边形加一个标准矩形框(边是水平和垂直的矩形),然后对这个标准矩形进行曲线切割,切割出来的两图再与多边形分别相交,问题就简化多了:
a = 最大值(x(l1))
b = 最小值(x(l1))
c = 最大值(y(l1))
d = 最小值(y(l1))
l2 = {(a, c), (a, d), (b, d), (b, c)}
q1 = 多边形(l2)
这时候我们发现曲线短了,切不不矩形框,加点处理:
N = 最近点(q1, H)
O = 最近点(q1, M)
然后在曲线上插入一些点:
l4 = 序列(描点(e, i), i, 0, 1, 1 / 30)
有了这些点,足够我们分割矩形框了:
l5 = 合并({{l2(1), N}, l4, {O, l2(2)}})
p1 = 多边形(l5)
l6 = 合并({{l2(4), N}, l4, {O, l2(3)}})
p2 = 多边形(l6)
余下的事就简单多了,用得到的两个图形分别与多边形相交:
poly2 = 相交路径(poly1, p1)
poly3 = 相交路径(poly1, p2)
2021年03月17日 02点03分 2
level 11
小技巧,使用形如“多边形”、“相交路径”和3D中使用立体图形工具等命令,会在代数数出现大量点、线代码,有时候我们并不需要这些东西,又懒的一个个去隐藏,甚至在动态图形中,如相交路径是动态的话,还会不断出现新的点、线,隐藏都没法完全做到,这时候可以考虑用列表的方法了,如:
多边形(A,B,C,D,E)
改为:
l1={A,B,C,D,E}
多边形(l1)
这时候不管在代数区、还是图形区,就只有一个多边形了。
同理,处理上边两个相交图形,修改如下:
l7 = {相交路径(poly1, p1)}
l8 = {相交路径(poly1, p2)}
2021年03月18日 01点03分 3
level 6
太实用了,我也学着做了,太漂亮了
2023年10月05日 14点10分 4
1