- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想计算一个 SKSpriteNode
在被施加脉冲后的轨迹。我有 12 个球,我想把它们放在球发射后的位置。我正在使用等式 𝕡(t)=𝕡₀+t(𝕧₀+½Δt𝕒)+½t²𝕒
我对节点施加的冲量基于用户在屏幕上拖动的长度。
这是我试过的:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches{
let location = touch.location(in: self)
startPositionDrag = location
}
}
在 touchesMoved
中,我更新轨迹节点以显示如果在该位置启动节点将去向的位置。
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches{
movedLocation = touch.location(in: self)
calculateTrajectoryy(velocityY: (startPositionDrag.y - movedLocation.y), velocityX: (startPositionDrag.x - movedLocation.x))
}
这是我使用等式的地方。我有一个 12 个球的数组。我使用 i
作为时间,因为我想将每个球放在 i
秒后节点所在的位置。
func calculateTrajectoryy(velocityY: CGFloat, velocityX: CGFloat){
for i in 0...12{
let time = CGFloat(i)
let accelerationX = CGFloat(0)
let accelerationY = CGFloat(-9.8)
var x = CGFloat()
var y = CGFloat()
// 𝕡(t)=𝕡₀+t(𝕧₀+½Δt𝕒)+½t²𝕒
x = ball.position.x + time * (velocityX + 0.5 * time * accelerationX) + 0.5 * time * time * accelerationX
y = ball.position.y + time * (velocityY + 0.5 * time * accelerationY) + 0.5 * time * time * accelerationY
arrray[i].position = CGPoint(x: x, y: y)
}
}
最后在 touchesEnded
中,当用户松开拖动时,节点将应用一个脉冲,它应该完全遵循创建的球的路径。
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches{
let location = touch.location(in: self)
ball.physicsBody?.applyImpulse(CGVector(dx:(startPositionDrag.x - endPositionDrag.x), dy:(startPositionDrag.y - endPositionDrag.y))
}
}
}
球不遵循球产生的弧线。球射出一点点,而球的弧线又大又长。我认为这可能与单位转换有关。该等式使用每秒米数的速度值,而拖回的位置是 CGFloat
。米会比 CGFloat
长,因此预测的轨迹会更长。我如何才能将轨迹转换为与像素或 CGFloat
一起使用?我可以除以像素与米的比率吗?
最佳答案
(从物理学的角度回答,我不是 swift 或 sprite-kit 的专家)
“单位”的选择(以及一个点代表的物理距离)完全由您决定,您在调用 applyImpulse()
之前所拥有的数学与假设 1point = 1米。这可能是您想要的,也可能不是您想要的,但这是一个不错的选择 - 顺便说一句,在您的代码中唯一(某种程度上)将一个点固定到真实世界的仪表的是重力值 9.8,否则您可以只是称它们为点,实际意义没有变化——物理引擎并不关心。
您在代码中放入 array[] 的连续球位置是假设发射的球将在一秒钟内覆盖从 start_of_drag 到 end_of_drag 的距离(因为您只是将距离用作速度值,即, 1m 变为 1m/sec, 2m = 2m/s, 等等)。(注意我不太清楚 12 点预测路径在您的情况下如何正确工作,因为要获得指向拖动方向的矢量,您通常会执行 end_drag - start_drag
,而你的代码确实 start - end
)
您遇到的问题可能与 applyImpulse
期望以牛顿*秒为单位的值有关(并且速度变化将取决于球的质量:delta-V = impulse/mass ),而您使用相同的“成为速度的距离”单位调用该函数。
如果球在拖动之前总是静止的,并且您希望它立即开始以选定的速度移动到某个地方,那么简单地将它的速度分配给所需的值并让它飞起来可能会更容易,而不是尝试使用 applyImpulse
,例如:
(编辑:正如@knight0fdragon 指出的那样,SK 的距离单位是点,但速度是以抽象“米”= 150pt/sec 为单位测量的,所以如果你到目前为止以点和点/秒为单位进行数学计算,您必须在修改 physicsBody 向量之前缩放速度:将其除以 150.0)。
ball.physicsBody?.velocity = CGVector(dx:velocityX, dy:velocityY)
如果球已经有一定的速度并且您想修改它一定量(用速度单位而不是 N*m 表示)并且忽略质量,请将该速度变化添加到球的当前速度。
关于Swift:使用施加的脉冲计算节点的轨迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51813905/
我有一系列 gps 值,每个值包含:timestamp, latitude, longitude, n_sats, gps_speed, gps_direction, ... ( NMEA data
我正在尝试绘制两点之间的轨迹路径。我只知道有问题的两点和它们之间的距离。我希望能够计算的是到达终点所需的速度和角度。 我还希望能够将一些重力和风因素考虑在内,这样路径/轨迹就不那么“完美”了。它用于电
有没有人对使用顶点缓冲区/4f 颜色缓冲区绘制粒子在 opengl 中对来自喷气发动机(带有加力燃烧室)的粒子流进行编码的近似值有任何指导? 我认为这个问题有两个方面: 作为温度和与燃烧的气体类型相关
问题 我正在迁移多个 ggplot/ggvis plotly 到 plotly在 shiny应用。我遇到了一个关于跟踪链接的问题。我希望能够通过 group 显示/隐藏痕迹在图例上,在相关数据框之间共
我想为玩具车在没有障碍物的平面 (2d) 上规划一条路线。玩具车应该从点 (p1x,p1y) 移动到 (p2x,p2y)(又名狄利克雷边界条件)。此外,玩具车在起点的速度是(v1x,v1y),终点处要
我正在开发一个路径/ map 应用程序,该应用程序在一个区域中绘制了自定义路径,并将帮助用户在“森林”区域的一些路径周围导航。 目前,我正在使用 MKMapView 来获取用户数据/位置,并从 KML
我目前正在尝试根据从 iPhone 视频中拍摄的一系列图像重建坠落物体(例如球或石头)的 3D 轨迹。 我应该从哪里开始寻找?我知道我必须校准相机(我想我会使用 Jean-Yves Bouguet 的
我正在尝试使用 matplotlib 在 map 上绘制 CSV 文件中的线条和标记。 数据: AL99,2017080912,SHIP,0,17.1,-55.6,25,0 AL99,20170809
我正在尝试仅使用广播源来重建篮球的 3D 轨迹。 为此,我必须计算单应矩阵,因此在每一帧中,我都成功地跟踪了球,以及它们在“现实世界”中的位置已知的 6 个点(4 个在球场上,2 个在篮板上)为在图片
如果我有一个像这样的动画圈 example , 有没有一种方法可以在 Canvas 上留下 1px 纯白色的永久痕迹? 我试过动态构建路径,但无法让它工作。 提前致谢,如有任何帮助,我们将不胜感激 最
正在工作,即将发布,没有真正的更新,[6.3.2] 突然出现此错误。 花了一天时间在 OAuthSwift V0.3.4、0.3.5、0.3.6 之间切换,同样的错误发生了。还有一次(但非常罕见),我
我正在尝试使用 matlab/octave 为这个螺旋制作动画我希望它向上或向下螺旋 t = 0:0.1:10*pi; r = linspace (0, 1, numel (t)); z = lins
我有一个有点难的算法问题,我从很多搜索中找不到任何合适的算法,所以我希望 stackoverflow 上的人可能知道答案。 我有一组车辆在 2D 空间中移动时的 x,y 坐标,坐标记录在时间段内的“决
在服务器(MySQL 或 Oracle 或任何文件)上存储 GPS 坐标(航迹)的最佳方式是什么?例如,GoogleMaps 是如何实现的?我想保存和比较相同部分的轨道。 附言我有所有必要的数据。 最
The link to download the GPS traces on OSM is quite easy to get. 但是,里面的每个文件都 super 大。而且也没有地理位置分类。所以我
这个问题与地理空间信息系统的知识有些重叠,但我认为它属于这里而不是 GIS.StackExchange 有很多应用程序处理具有非常相似对象的 GPS 数据,其中大多数由 GPX standard 定义
我正在使用此处找到的 locu-node node.js 库:https://github.com/Locu-Unofficial/locu-node ,这是 Locu 服务的 API 客户端。在提供
我正在尝试将一个元素从位置 A 动画到位置 B,但我不希望它在每个点之间线性移动,我希望有一种“抛物线”轨迹。 我可以使用 jQuery.animate() 吗? 或者我应该使用 setInterva
总结:如何避免不同线程的不同工作负载导致的性能损失? (内核在每个线程上都有一个 while 循环) 问题:我想在许多不同的初始条件下使用 Runge-Kutta 求解粒子轨迹(由二阶微分方程描述)。
我正在创建一个应用程序,其中包含一些变量的区域数据。该应用程序允许您通过 selectInput 选择用户想要可视化的区域。出于比较/信息目的,我希望用户在 plot_ly 中可视化所选区域以及全国平
我是一名优秀的程序员,十分优秀!