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

Project1

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

[已经解决] 天气系统的其中一个运动轨迹的函数表达式。已解决

[复制链接]

Lv2.观梦者

梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
帖子
205

开拓者

跳转到指定楼层
1
发表于 2017-10-15 14:00:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 飞翔的小鸟3 于 2017-10-18 12:01 编辑

https://rpg.blue/forum.php?mod=v ... =%E5%A4%A9%E6%B0%94
这个帖子,其中第一张gif图片,是这样子运动的


这要怎么描绘XY的坐标啊,我百度不到斜着的三角函数啊。

Lv3.寻梦者

梦石
0
星屑
2724
在线时间
227 小时
注册时间
2016-3-27
帖子
576
2
发表于 2017-10-15 14:43:59 | 只看该作者
作关于y=sinx关于y=1/2x的对称函数就搞定,主要是变过来比较麻烦
现在还能改名吗qwq
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7290
在线时间
1690 小时
注册时间
2017-4-28
帖子
85

开拓者

3
发表于 2017-10-15 21:09:34 | 只看该作者
原帖的做法,大概是雪片下降的同時今其旋轉,並調整旋轉軸心至外圍,不需要什麼三角函数。

点评

还有这种操作?我试试看。  发表于 2017-10-15 21:39
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

4
发表于 2017-10-15 23:59:46 | 只看该作者
本帖最后由 guoxiaomi 于 2017-10-16 14:54 编辑

三角函数本来就是匀速圆周运动在直线上的投影,你把圆周运动投影到斜着的直线上不就行了吗?高一第一章的内容啊老铁
三楼的说法是对的,用的是摆线的方程:
  1. x = r * sin(w*t + phi) + k1 * t + b1
  2. y = r * cos(w*t + phi) + k2 * t + b2
复制代码

点评

后面的线性部分标志着摆线轨迹的伸展方向,phi作为相位差,也能在一定意义上改变摆线的形状  发表于 2017-10-16 19:44
呃。。。百度了一下,R是摆动的半径,T是弧度,可是W、phi、k1、b1又是什么?  发表于 2017-10-16 18:19
算几百次个三角函数,乘除法基本上没有影响……虽然我确实是高一学的三角函数……  发表于 2017-10-16 13:28
前辈,这个ace的性能肯定和显卡和cpu有关对吧?  发表于 2017-10-16 12:15
我翻了一下,第四册才教到三角函数。  发表于 2017-10-16 12:08
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

5
发表于 2017-10-16 20:14:25 | 只看该作者
本帖最后由 guoxiaomi 于 2017-10-16 20:24 编辑

所谓摆线,在数学中,摆线(Cycloid)被定义为,一个圆沿一条直线运动时,圆边界上一定点所形成的轨迹。(来自百度百科)
标准的摆线方程是这样的:
  1. x = t - sin t
  2. y = 1 - cos t
复制代码

长这个样子:标准摆线

注意这里有个很尖锐的峰,并且摆线是朝着 x 轴正向移动的
1. 如果要去掉尖峰,就要调整摆轮转速(wR)与移动速度之比(v)。
2. 如果想要你给的类似倾斜的三角函数,就要让 y 方向也随着 t 有一个线性变化的值。
3. 如果要得到性质更舒服的摆线,要调整两个三角函数的相位差。
比如:
  1. x = (t + sin(t - \pi/4))
  2. y = (t + cos(t))
复制代码

好看摆线

对于三角函数 y = sin (x) 的旋转:
  1. x = t
  2. y = sin(t)
  3. x' =  x * cos(a) + y * sin(a) = cos(a) * t + sin(a) * sin(t)
  4. y' = -x * sin(a) + y * cos(a) = -sin(a) * t + cos(a) * sin(t)
复制代码

这显然也是摆线,取 sin(a) = 0.6, cos(a) = 0.8,得到旋转正弦曲线

点评

现在已晚,明天再议。我倒是发了一个范例给你,你闲着可以去看看呐。  发表于 2017-10-17 23:28
我写了,楼下那样子写,应该和你说的一样才对。但是就是没改变轨迹  发表于 2017-10-17 23:15
哦,我看了一下,没错啊  发表于 2017-10-17 19:31
你那个y = 1 - cos t的1是不是写错了?应该是t?  发表于 2017-10-17 19:29
我反正是看不懂……  发表于 2017-10-16 22:17
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
帖子
205

开拓者

6
 楼主| 发表于 2017-10-17 20:04:12 | 只看该作者
本帖最后由 飞翔的小鸟3 于 2017-10-17 20:39 编辑
guoxiaomi 发表于 2017-10-16 20:14
所谓摆线,在数学中,摆线(Cycloid)被定义为,一个圆沿一条直线运动时,圆边界上一定点所形成的轨迹。( ...

更新:代码写错了,等等

怎么p出来才几次就几万了,等等,我好像搞错一个地方了。
给你运动轨迹的代码。
RUBY 代码复制
  1. def path_particle_1(type,type2)
  2.     case type
  3.     # 斜一点
  4.     when 1
  5.       x = 2
  6.       y = 4
  7.     # 斜更多
  8.     when 2
  9.       x = 4
  10.       y = 2
  11.     end
  12.     case type2
  13.     # 第一批粒子
  14.     when 1
  15.       $weather_xq += x
  16.       $weather_yq += y
  17.       for a in 0..$pic_number2
  18.       $weather_x[a] = 0.8*$weather_xq + 0.6*Math.sin($weather_xq)
  19.       $weather_y[a] = -0.6*$weather_yq + 0.8*Math.sin($weather_yq)
  20.       end
  21.       $weather_x2q += x
  22.       $weather_y2q += y
  23.       for a in 0..$pic_number
  24.       $weather_x2[a] = 0.8*$weather_x2q + 0.6*Math.sin($weather_x2q)
  25.       $weather_y2[a] = -0.6*$weather_y2q + 0.8*Math.sin($weather_y2q)
  26.       end
  27.     # 第二批粒子
  28.     when 2
  29.       for a in 0..$pic_number2
  30.       $weather_x3[a] += x
  31.       $weather_y3[a] += y
  32.       end
  33.       for a in 0..$pic_number
  34.       $weather_x4[a] += x
  35.       $weather_y4[a] += y
  36.       end
  37.     end
  38.   end



看我给你的消息

点评

根本没有理解你在做什么……你怎么设置轨道的?这个函数在游戏里怎么调用?你都没写出来  发表于 2017-10-17 23:18
t是时间参数,每帧+1或者多少随你定的那种……x和y是坐标  发表于 2017-10-17 22:50
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

7
发表于 2017-10-18 00:57:59 | 只看该作者
本帖最后由 guoxiaomi 于 2017-10-18 01:29 编辑

我按照你的格式写了一下,你改一下脚本的 13 - 20 行:
RUBY 代码复制
  1. # 第一批粒子
  2. when 1
  3.   $weather_xq += x * 0.1
  4.   $weather_yq += y * 0.05
  5.   for a in 0..$pic_number2
  6.     $weather_x[a] += (0.8 + 0.6 * Math.cos($weather_xq)) * 10
  7.     $weather_y[a] += (0.6 - 0.8 * Math.cos($weather_yq)) * 10
  8.   end

有 3 个要注意的地方:
1. VA的坐标轴和我上面帖子里的坐标轴是不一样的,Y轴是反的,所以Y轴要添负号
2. 你下面的函数都是 +=,不知道为什么这里却变成了直接设置坐标,对轨迹函数求导得到每一步的增量
3. 正弦的路径要求x,y的三角函数频率相同,所以这里 y * 0.05 而 x * 0.1,使得 Δ($weather_xq) = Δ($weather_yq)

这个问题到此为止了,其实这个与其说是天气系统,应该理解为“弹幕”才对,你可以看一下关于弹幕的全部搜索,或者搜索"stg"

点评

我好几个帖子都没结贴,版主最近都不在吗?  发表于 2017-10-18 12:02
好吧,我试了,可以用,这个问题到此为止吧。谢谢你  发表于 2017-10-18 12:01
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 16:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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