- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个简单的 2D 物理引擎。引擎将重力定义为 90 度(垂直向下)时的 10 个单位。在宇宙中,有一些物理实体,每个实体都有一个由速度和方向组成的速度。每次实体更新时,我都会将重力矢量添加到每个实体的速度矢量。
如果实体是静止的或平行于重力矢量移动,它会掉落,否则它会成功一半。我的意思是,假设物体在表面上方 45 度角拍摄,它会上升,弯曲到顶点,然后继续平行于表面。重力似乎在上升时改变了速度,但不会使物体掉落。
我想知道我解决这个问题的方法是否有问题,或者我的解决方案在代码中的实现是否有问题。
更新函数:
public static void UpdateAll()
{
foreach (var entity in Entities)
{
entity.Velocity.AddVector(Universe.Gravity.Speed, Universe.Gravity.Direction);
}
var iterator = 1;
foreach (var entity in Entities)
{
for (var index = iterator; index < Entities.Count; index++)
{
//Collision Detection
}
entity.Update();
iterator++;
}
}
添加向量函数:
public void AddVector(float speed, int direction)
{
var radiansA = Angles.DegreesToRadians(SetDirection);
var radiansB = Angles.DegreesToRadians(direction);
var vAx = SetSpeed * (float) Math.Cos(radiansA);
var vAy = SetSpeed * (float) Math.Sin(radiansA);
var vBx = speed * (float) Math.Cos(radiansB);
var vBy = speed * (float) Math.Sin(radiansB);
var magX = vAx + vBx;
var magY = vAy + vBy;
var magnitude = (float) Math.Sqrt(Math.Pow(magX, 2) + Math.Pow(magY, 2));
var theta = Angles.RadiansToDegrees((float) Math.Atan2(magY, magX));
SetSpeed = magnitude;
SetDirection = theta;
}
编辑:我按照一些评论的建议删除了 if 语句,但结果仍然相同。
已解决:评论中指出了代码错误,我更新了添加功能以反射(reflect)所需的更改。
最佳答案
不确定为什么需要测试方向。无论物体如何移动,都应添加重力矢量。如果它向上移动,它会减速。如果它向下移动,它会加速。如果它水平移动或根本不动,它就会开始下落。在任何情况下,这都是通过添加重力矢量来实现的。
速度也应该是一个向量。它应该有一个 x 和一个 y 分量。然后所有这些“方向”的东西都可以被丢弃。因此,到处都使用由 x 和 y 定义的向量。然后,所有速度计算都将简化为简单的矢量加法。这使得所有数学运算比使用角度简单得多。
public struct Vector
{
public Vector(int x, int y)
{
this.X = x;
this.Y = y;
}
public int X { get; }
public int Y { get; }
public static Vector operator +(Vector a, Vector b)
{
return new Vector(a.X + b.X, a.Y + b.Y);
}
public float Magnitude
{
get
{
int d = X * X + Y * Y;
if (d == 1 || d == 0) {
return d;
} else {
return (float)Math.Sqrt(d);
}
}
}
public override string ToString()
{
return $"Vector({X}, {Y})";
}
}
也无需计算每次变速后的大小和角度。当您需要从适当的属性中获取这些值时,只需从向量中获取这些值即可。 (刚刚添加了一个 Magnitude 属性作为例子)
Vector speed, gravity;
...
//Calculate new speed:
speed += gravity;
另一个有用的运算符重载是向量乘以常数
public static Vector operator *(double c, Vector a)
{
return new Vector((int)Math.Round(c * a.X), (int)Math.Round(c * a.Y));
}
关于c# - 在 C# : Error with my approach or implementation? 中模拟重力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37465354/
我经常在 C 标准文档中看到“实现定义”的说法,并且非常将其作为答案。 然后我在 C99 标准中搜索它,并且: ISO/IEC 9899/1999 (C99) 中第 §3.12 条规定: 3.12 I
“依赖于实现”中的“实现”是什么意思? “依赖于实现”和“依赖于机器”之间有什么区别? 我使用C,所以你可以用C解释它。 最佳答案 当 C 标准讨论实现时,它指的是 C 语言的实现。因此,C 的实现就
我刚刚在 Android-studio 中导入了我的项目,并试图在其中创建一个新的 Activity。但我无法在 android-studio 中创建 Activity 。我指的是here我看不到将目
我想知道您对为什么会发生此错误的意见。在陆上生产环境中,我们使用 CDH4。在我们的本地测试环境中,我们只使用 Apache Hadoop v2.2.0。当我运行在 CDH4 上编译的同一个 jar
我正在尝试集成第三方 SDK (DeepAR)。但是当我构建它时,它会显示一个错误。我试图修复它。如果我创建一个简单的新项目,它就可以正常工作。但是我现有的应用程序我使用相机和 ndk。请帮我找出错误
我很好奇为什么我们有 @Overrides 注释,但接口(interface)没有类似的习惯用法(例如 @Implements 或 @Implementation)。这似乎是一个有用的功能,因为您可能
我对 DAODatabase(适用于 Oracle 11 xe)的 CRUD 方法的实现感到困惑。问题是,在通常存储到 Map 集合的情况下,“U”方法(更新)会插入新元素或更新它(像 ID:Abst
Java-API 告诉我特定类实现了哪些接口(interface)。但有两种不同类型的信息,我不太确定这意味着什么。例如,对于“TreeSet”类:https://docs.oracle.com/en
我有一个接口(interface) MLService,它具有与机器学习算法的训练和交叉验证相关的基本方法,我必须添加两个接口(interface)分类和预测,它们将实现 MLService 并包含根
我一直想知道如何最好地为所有实现相同接口(interface)的类系列实现 equals()(并且客户端应该只使用所述接口(interface)并且永远不知道实现类)。 我还没有编写自己的具体示例,但
我有一个接口(interface)及其 2 个或更多实现, public interface IProcessor { default void method1() { //logic
我有同一个应用程序的免费版和高级版(几乎相同的代码,相同的类,到处都是“if”, list 中的不同包, list 中的进程名称相同)。主要 Activity 使用 IMPLICIT Intent 调
这是我为我的应用程序中的错误部分编写的代码 - (id)initWithData:(NSData *)data <-------- options:(NSUInteger)opti
请查找随附的代码片段。我正在使用此代码将文件从 hdfs 下载到我的本地文件系统 - Configuration conf = new Configuration(); FileSys
我想在 MongoDB 中使用 Grails2.5 中的“ElasticSearch”插件。我的“BuildConfig.groovy”文件是: grails.servlet.version = "3
我收到一条错误消息: fatal error: init(coder:) has not been implemented 对于我的自定义 UITableViewCell。该单元格未注册,在 Stor
得到这个错误 kotlin.NotImplementedError: An operation is not implemented: not implemented 我正在实现一个 ImageBut
typedef int Element; typedef struct { Element *stack; int max_size; int top; } Stack; //
Playground 代码 here 例子: interface IFoo { bar: number; foo?: () => void; } abstract class Abst
我想知道如何抑制警告: Category is implementing a method which will also be implemented by its primary class. 我
我是一名优秀的程序员,十分优秀!