npumcm选拔题3暨ACMC2020A

一个人翘了两天课做完的
中间做了一些作业
后续在周末完成论文与优化。。。

说白了就是填充。。。
感觉主要难点在于编程计算
充分利用了matlab的polyshape

环形线填充

主要使用polybuffer函数,这个函数原理就是求并集,然后就一层层算
但是运算速度是比较慢的
核心代码

  while ~isempty(polyout.Vertices)%交集为空终止循环
        polyout=polybuffer(polyshape(polyout.Vertices(1:end,1:2)),-m);
        out(i+1).num=polyout.Vertices;
        i=i+1;
   end

判断当生成的点集为空时终止循环即可
在这里插入图片描述

平行线填充

这个用一次环形填充,得到的新的polyshape对象与从上到下等间距的平行线求交集利用bool运算函数
核心代码

    for i=1:round((1/m)*round(abs(low(1,2))+upper(1,2)))
       line(i).num=[low(1,1),low(1,2)+m*(i-1);upper(1,1),low(1,2)+m*(i-1)];
   
       [inLine(i).num,outLine(i).num] = intersect(polyshape(area),line(i).num);
%     plot(inLine1_2(i).num(:,1),inLine1_2(i).num(:,2),'b')%都涂蓝颜色太奇怪了。。
%     plot(inLine1_2(i).num(:,1),inLine1_2(i).num(:,2),[mod(i,1),mod(i,2),mod(i,3)])
   
   end

然后进行两次分组,因为得到的数据都是端点的xy坐标,中间的NaN表示断开
最后分别求每一组的连接长度
不同的组之间怎么连,这个我也不太懂,如果有会的还望点拨
在这里插入图片描述

总体来说没有涉及到太多的算法,但是运算的速度好慢啊,本人水平有限qwq,去复习考试+学习新东西了


刚刚想到怎么连了,可以分段左右依次连,因为固定了顺序了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codeqb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值