设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2603|回复: 11
打印 上一主题 下一主题

[原创发布] 【算法分享】如何利用纯事件进行开方

[复制链接]

Lv4.逐梦者

梦石
9
星屑
398
在线时间
121 小时
注册时间
2012-5-1
帖子
46
跳转到指定楼层
1
发表于 2020-5-20 01:35:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

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

x
    之前有人问到RM没有开方功能,虽然我觉得这个功能没有也无所谓,但偶尔可能还是会用到的。再加上我也挺感兴趣,那就设计一个用纯事件开方的算法吧。虽然我知道这方法肯定有前人做过,不过是以自己的方法重现一下而已。
     首先根据扔鸡蛋模型,要想知道哪一层扔的鸡蛋会碎,就要一层层去试。要想知道Y是哪个X的平方,就将X代入1,2,3,4....不停相乘直到找到那个数就可以了。这是理论基础。
     这时候就会有小朋友问了,你这X代入的都是整数,怎么能准确找到呢!
     RM是没有小数的啊哈哈哈。RM的变量输入上限是99999999,那么求根的话只需要试10000次就够了,就这样我们获得了一个算法雏形——

     而且这么简单的数数算法计算机也能一瞬间算出来,人类的科技真是伟大。
     肯定会有人觉得这方法不是蠢到爆炸,要是我做ACT时一直并行处理的话不卡得要死!
     没错,接下来就是重点,既算法的优化。使用二分法的话,因为99999999小于2的二十七次方,即可保证最多只需要进行27次循环就能求得其整数根。
     不过RM虽然输入只能8位,但其实输出变量理论可以到达255位,有需要你可以根据自己的变量上限进行调整,这里只用八位数作说明示范。
     原理很简单,先从2的14次方16384开始求根,如果高于2048的平方,则将根值上升到【2的11次方加2的10次方】,否则降至【2的11次方减2的10次方】。每一次增减的值都是上一个增加值的一半,如此循环到2的0次方,即1的时候,就是最近似的整数解了。
     之所以使用2的平方数列而不是10000/2是因为RM的计算结果会忽略小数点,所以整除最好。

     这样一来,优化算法就完成了。当然在现代计算机强大的算力面前几乎没有区别。
     这时候又有人会问,我真的想要求小数怎么办,你给我精确到小数点后一位行不行。当然可以,虽然RM不能显示小数,但值还是能求出来的,但是前提是你一开始用来求根的值要在一开始乘以一百,即10的二次方。同理要精确到小数点后两位需要乘以一万,三位要乘以一百万。在设置一开始求根的值时也要加上精确位数数量的零。

     看明白之后,设计开三次方以上的逻辑只不过这循环多乘几次根而已。因为这个算法只用到基础功能,所以也适用于之前版本的RM。
     那么这次的纯事件算法分享就到这里结束了。

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 精品教程

查看全部评分

头像被屏蔽

Lv4.逐梦者 (禁止发言)

梦石
0
星屑
5706
在线时间
922 小时
注册时间
2013-8-29
帖子
1468
2
发表于 2020-5-20 07:16:03 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7612
在线时间
1227 小时
注册时间
2008-12-14
帖子
555
3
发表于 2020-5-20 08:15:18 | 只看该作者
我有点惊呆了。
应该是,Math.sqrt(x),没试

点评

好像是哦  发表于 2020-5-20 09:36
需要购买本人MV插件必须先加wx好友。加不上wx就是本人忙,没时间卖。原则上太久以前的插件也不想卖,因为我也忘了,维护上会不给力。wx名:alskyif    本人插件地址:
   LCK_SRPG梦幻模拟战、火焰纹章类系统
   究极立绘ADV系统

   究极换装统合系统
   究极! 回想与CG系统
   消息文字的距离调整  
   自动返回上一张地图
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3336
在线时间
468 小时
注册时间
2014-2-6
帖子
258
4
发表于 2020-5-20 12:40:00 | 只看该作者
我正苦恼怎么用坐标做圆形的AOE,结果怎么开方出来,不过这个方法有点复杂吼
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
9
星屑
398
在线时间
121 小时
注册时间
2012-5-1
帖子
46
5
 楼主| 发表于 2020-5-20 13:08:51 | 只看该作者
天空娃娃 发表于 2020-5-20 12:40
我正苦恼怎么用坐标做圆形的AOE,结果怎么开方出来,不过这个方法有点复杂吼 ...

你如果用代码的话其实很简洁。如果使用事件的话,建议你不开方,直接将半径乘以半径作为对比参数就好。即r的平方=M=ΔX的平方+ΔY的平方
回复 支持 1 反对 0

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22087
在线时间
1057 小时
注册时间
2019-3-5
帖子
1424
6
发表于 2020-5-20 23:37:04 | 只看该作者
我数学不好,这个算法一般能应用在什么东西上?

点评

草(日语)  发表于 2020-5-21 12:51
基本上完全没有用场,只是分享个逻辑思路  发表于 2020-5-21 00:22
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2966
在线时间
334 小时
注册时间
2020-6-14
帖子
89

极短22参与

7
发表于 2020-9-1 20:16:25 | 只看该作者
这直接牛顿法不行么。。把牛顿法迭代公式的除换成整除就可以了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-26 16:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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