欢迎光临散文网 会员登陆 & 注册

简介战舰模型excel的编写

2021-11-16 23:04 作者:秋羽美奈子Official  | 我要投稿

2020年10月整了个活,拿excel试着搞了一下船体型线的“建模”。这个坑后来基本没动过叻,现在有点摆烂叻,不过觉得说一下怎么搞这玩意儿还是比较好玩的。

声明:纯属数学系学生自娱自乐整活,不涉及有关战舰的专业内容。

先上图。

还是做出来了效果的。图3是模型的参数调整。因为时间有点仓促,这些数据点的对应关系懒得详解了。

那么,这个excel的编写,从计算上,主要是两方面:模型的构建,视觉展示效果。

构建模型,当然是先设定好代表的样点,然后处理过渡线条这些对应关系。对线条,我是简单地用二阶贝塞尔曲线处理的。严格一点应拿三阶精度的样条曲线(确保曲率平滑?),不过我制作力不足,先拿自己会搞的凑合凑合。

那么,比如说给定了同一平面两个点的坐标,和连线在这两点的走向,接下来我要构建连线。很简单,只需要把走向延长相交,就得到了二阶贝塞尔曲线的两个“基向量”(我自己这么称的)。然后就是一个数学上的处理,没空细讲。就截个以前自己整理数学笔记的图吧。

然后就是在excel里处理选取分段啊剩下的一些连续过渡的细节问题了。

视觉展示的效果,分为两个计算实现:旋转变换,可视纵深。

旋转变换非常好理解,就是直角坐标系变成球坐标系,统一调整角度,再变回来。

可视纵深简单来说,就是视觉投影长度跟视觉平面所垂直的纵深是成反比的。比如吧,取xy是视觉平面,然后拿一只笔平行于xy面,那么变更z值(到人眼的距离),可以简单做个小实验来验证一下笔的可视长度跟纵深的关系。就是线性负相关的。

这里还有一个小点思考:为什么不是用极坐标去负相关(弧面成像)?可以用一个规律反证:空间中,对直线做旋转变换,不改变其(可视的)线性。从而证明,可视纵深的效果计算,是直接用垂直xy可视面的z深度,而不是极坐标的极半径。

在了解了原理之后,再来简单说一下实际操作的优化问题。先放我在20年国庆假期左右做了差不多一周的初版。

就不全部截图了。初版说实话运行起来非常卡,达到11MB大小。我后来进行了计算上的优化,二版(也就是开头所示)大小为6MB,可以说优化很成功。

当然在输入界面这些也有所整理优化。那么到二版的核心优化是什么呢?就是对三维数据的构建计算做了一个简化。三维效果图,包括平面各视图,都是散点图,只不过用了两万多个散点。那么,初版对三维的点集,是先算出来对应坐标,再做旋转、纵深处理。但是我对过渡曲线的构建基础模型是向量,那么我只需要对向量做相应的旋转、纵深投影处理,再直接构建过渡段的数据点,就能节省大量的视觉效果的处理计算。

放些数据计算的截图吧。

彩 蛋(?)

本来,我是想一口气把炮塔啊动力舱啊装甲模型啊这些的可视化也搞出来,从而实现excel版的SpringSharp(计算战舰的一些设计参数)还带三维模型(想法挺好),但是....excel65535行上限不够我用了(*v*)也是玩到一绝,想起来以前中学时搞过一些差点计算器写不下的复杂迭代算法还把计算机算了几分钟算到没电关机了....

另一方面,即使简化压缩到了6MB大小,在手机WPS上运行还是完全不行,但这就不是我的锅了。是WPS它自己受不住动不动崩溃的。而且以前一些没这么大的算法也有WPS显示错误或者算错数的问题......不过在电脑上这玩意要加载也要点时间。总比某游捏船加载快而且不至于闪退崩溃(确信)

不过,后来所积累的间断的思考,已经解决了一部分问题。对于塞不下数据点的问题,我后面构想可以通过用折线图替代散点图来解决。用折线图就可以大幅减少需要的样点,并且很好地压缩文件大小。但是实际处理上比较麻烦,是需要对样点正确排序并叠图的,而且我没想到,单元格的长宽也会拉扯图像......加上后面忙了很多,现在基本上就烂尾这样了。

虽然改进还没有完全实现,但是前景很好。甚至有望把文件大小从6MB压缩到1M以内,并且很好地因为是叠图从而不存在数据上限的问题。理论上已经可以继续把炮塔啊动力啊装甲啊还有鱼雷啊舰桥啊这些模块全做出来然后快乐叠叠图,甚至还初步尝试了填色....要是后面支持对颜色的计算那没准真就来点光影效果处理迫真建模了(大雾)然而这玩意做起来太累了......

注意这个填色只是简单取俩线段交错取点然后连线。只要把边界函数换一些曲线解析式,做出边缘为曲线的模块填色效果是没有问题的。

大概就说这么多吧......(*v*)有时候已经不知道做它的兴趣到底是战舰,还是数学,还是编程......大概三者都是吧。不过还是很有趣味、意义的。

附另一个模型的数据和图像。

有想法或兴趣欢迎在评论区留言。

简介战舰模型excel的编写的评论 (共 条)

分享到微博请遵守国家法律