- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我处理碰撞的方法是将速度向量分成两个分量,法线轴和切线轴,切线轴垂直于两个法线轴。法线轴平行于连接两个物体中心的线。
然后我将速度分量的法向量分量转换为动量。
动量 = 速度 * 质量。
然后我将物体 A 的动量传递给 B,再将 B 传递给 A。
然后我根据切线交换的动量和不变的速度找到 A 和 B 对应的速度。
我觉得很合理,而且有效!
但问题是它有时会出错。
我使用 Visual Studio。
我对调试工具知之甚少,但无法很好地利用它来查找故障。
拜托,如果有人能提供帮助,我将不胜感激。
这是我第 4 次从头开始编写整个代码。
但同样的方法总是会出错。
所以我开始从头开始写整件事,希望我能以某种方式通过组织来修复它。请...帮助。
class Vector
{
public double X = 0;
public double Y = 0;
public double Z = 0;
public Vector direction
{
get { return new Vector(0.00000001 + X / Math.Abs(X), 0.00000001 + Y / Math.Abs(Y), 0.00000001 + Z / Math.Abs(Z)); }
}
public double angle { get { return Math.Atan2(Y, Z); } }
//scholar operation
public static Vector operator + (Vector v1 , double s) {
return new Vector(v1.X + s , v1.Y + s , v1.Z +s );
}
public static Vector operator -(Vector v1, double s)
{
return new Vector(v1.X - s, v1.Y - s, v1.Z - s);
}
public static Vector operator *(Vector v, double s)
{
return new Vector(v.X * s, v.Y * s, v.Z * s);
}
//vector to vector operation
public static Vector operator +(Vector a, Vector b)
{
return new Vector(a.X + b.X, a.Y + b.Y, a.Z + b.Z);
}
public static Vector operator -(Vector a, Vector b)
{
return new Vector(a.X - b.X, a.Y - b.Y, a.Z - b.Z);
}
public static Vector operator *(Vector a, Vector b)
{
return new Vector(a.X * b.X, a.Y * b.Y, a.Z *b.Z);
}
//other operations
public static Vector operator %(Vector a, Vector b)
{
return new Vector(a.Y*b.Z - a.Z*b.Y, a.Z*b.X - a.X*b.Z , a.X*b.Y - a.Y*b.X);
}
public static double dotProduct(Vector a, Vector b)
{
Vector v = a*b;
return a.X + a.Y + a.Z;
}
public static void makeOrthonormalBasic(Vector a, Vector b, Vector c)
{
c = b % a;
if (c.squareMagnitude() != 0)
{
a = c % b;
}
}
public Vector()
{
X = 0;
Y = 0;
Z = 0;
}
public Vector(double x, double y, double z)
{
X = x;
Y = y;
Z = z;
}
public Vector (double x , double y )
{
X= x;
Y = y;
}
public void flip()
{
X *= -1;
Y *= -1;
Z *= -1;
}
public Vector fliped_vector()
{
Vector v = new Vector(X * -1, Y * -1, Z * -1);
return v;
}
public double magnitude()
{
return Math.Sqrt(X * X + Y * Y + Z * Z);
}
public double squareMagnitude() {
return X * X + Y * Y + Z * Z;
}
public Vector normalize()
{
double m = magnitude();
if (m > 0)
{
Vector v = new Vector();
v.X = this.X;
v.Y = this.Y;
v *= 1 / m;
return v;
}
return new Vector() ;
}
public void zero()
{
X = 0;
Y = 0;
}
public void set(double x, double y)
{
X = x;
Y = y;
}
public void add(double x, double y)
{
X += x;
Y += y;
}
}
class KCircle
{
double size = 30;
#region instant variables
public Ellipse shape = new Ellipse();
public Vector force = new Vector();
public Vector velocity = new Vector();
public Vector acceleration = new Vector();
public Vector position = new Vector();
#endregion
public double Vector
{
get { return Math.Sqrt(velocity.X * velocity.X + velocity.Y * velocity.Y); }
}
public double Angle
{
get { return Math.Atan2(velocity.Y, velocity.X); }
}
public double radius
{
get { return shape.Width / 2; }
}
public double mass
{
get { return Math.PI * radius * radius; }
}
public KCircle()
{
initialize();
}
public void initialize()
{
color_normal();
shape.StrokeThickness = 5;
shape.Width = shape.Height = size;
}
public void change_color()
{
shape.Fill = System.Windows.Media.Brushes.Red;
if (shape.Stroke == System.Windows.Media.Brushes.Red)
{
shape.Stroke = System.Windows.Media.Brushes.Blue;
return;
}
shape.Stroke = System.Windows.Media.Brushes.Red;
}
public void color_normal()
{
shape.Stroke = System.Windows.Media.Brushes.Black;
shape.Fill = System.Windows.Media.Brushes.White;
}
}
private void process_object_interactions(){
for (int i = 0; i < circles.Count; i++)
{
KCircle a = circles[i];
for (int z = i + 1; z < circles.Count; z++)
{
KCircle b = circles[z];
if (collide(a, b) )
{
a.change_color();
b.change_color();
Vector d = distance_between(a, b);
double angle_n = Math.Atan2(d.Y, d.X);
double angle_t = angle_n + 90;
double direction_n = 1;
double direction_t = 1;
if (angle_n < 0)
{
angle_n += 360;
}
if (angle_n > 180)
{
direction_t = -1;
}
if (angle_n > 90 && angle_n < 270)
{
angle_t = angle_n - 90;
angle_n += 180;
direction_n = -1;
}
if (angle_n > 360)
{
angle_n -= 360;
}
KCircle[] c = new KCircle[2];
c[0] = a;
c[1] = b;
double[] direction_n_array = new double[2];
direction_n_array[0] = direction_n;
direction_n_array[1] = direction_n * -1;
double[] direction_t_array = new double[2];
direction_t_array[0] = direction_t;
direction_t_array[1] = direction_t * -1;
double[] velocity_t = new double[2];
double[] velocity_n = new double[2];
for (int v = 0; v < 2; v++)
{
double angle = Math.Abs(c[i].velocity.angle - angle_n);
velocity_n[v] =(direction_n_array[v]) * (c[v].velocity.magnitude() * Math.Cos(angle));
velocity_t[v] = (direction_t_array[v]) *(c[v].velocity.magnitude() * Math.Sin(angle));
}
Vector[] new_vector_n = new Vector[2];
Vector[] momentum = new Vector[2];
for (int v = 0; v < 2; v++)
{
new_vector_n[v] = new Vector(velocity_n[v] * Math.Cos(angle_n), (velocity_n[v] * Math.Sin(angle_n)));
momentum[v] = new_vector_n[v];
momentum[v] *= c[v].mass;
}
/**
velocity_n_new[0] = normal_velocity_exchange(velocity_n[0], velocity_n[1], c[0].mass, c[1].mass);
velocity_n_new[1] = normal_velocity_exchange(velocity_n[1], velocity_n[0], c[1].mass, c[0].mass);
* */
for (int v = 0; v < 2; v++)
{
c[v].velocity.X = velocity_t[v] * Math.Cos( angle_t);
c[v].velocity.Y = -1* ((velocity_t[v] )* Math.Sin(angle_t)) ;
}
c[0].velocity += momentum[1] * (1 / c[0].mass);
c[1].velocity += momentum[0] * (1 / c[1].mass);
}
}
}
}
最佳答案
提出的问题分为两部分。
这个答案将解决第二个问题。
首先从 Visual Studio 以 Debug模式运行程序。如果顶部的工具栏中有一个条目显示 Release,请将其下拉并将其更改为 Debug。单击绿色三角形启动程序。
遇到错误时,Visual Studio 应显示异常助手对话框,如下所述:http://msdn.microsoft.com/en-us/library/2ww37f14.aspx
这个对话框的标题是什么?它应该说明遇到了什么类型的异常。
在“操作”部分中,单击“查看详细信息”以查看有关异常的更多信息。
展开详细信息并找到 Stack Trace。下拉右侧的 Stack Trace 以展开它。 Stack Trace 的第一行会告诉您哪一行源代码导致了错误,以及之前的方法调用顺序是什么。
使用此基本调试信息来帮助确定问题所在,或使用它向您的问题添加更具体的错误信息。
关于c# - 调试一个简单的碰撞处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8959802/
昨晚我因为这个问题脑子崩溃了。在确保没有来 self 的 eclipse 错误检查的明显错误之后,我开始调试我的程序。顺便说一下,我正在使用 Jre7。无论如何,每次我进入我的类调用(我们称之为“a”
(前言:我对 C/C++ 还很陌生,我真的不知道 native 代码中的调试实际上是如何工作的。) 一些消息来源说 gdb 和 lldb 可以调试 any program compiled to ma
我正在尝试从 Visual Studio 2012 外部调试 T4Scaffolding.Core Nuget 包。我使用的是安装了 Powershell 3.0 的 Powershell ISE,并
如何调试汇编代码?我在 Linux 上使用 gdb。我知道我可以看寄存器。有哪些调试汇编代码的方法? 最佳答案 您当然可以使用 breakpoints就像 C 或任何其他编译语言一样。 This ar
如何在每次通话时打印列表或 haskell 中的内容,例如: funct a list = funct (a + 1) (a : list) print list her
让我用我对 Makefiles 或 make 知之甚少的评论作为这个问题的前缀。 有一个非常大的项目,每晚自动构建。它以 Debug 和 Release 模式构建,Debug 用于 Valgrind
我正在创建一个计算每周工资的程序,那么任何加类工资都是该周正常工资的 1.5 倍。我的代码如下: #include int main() { double payrate; double h
我使用的是 Visual Studio 2010 Express Developer 版本。开发网站。我在我的 .aspx 页面中使用 JavaScript。 如何在 Javascript 中放置断点
我最近开始修补 Project Euler 问题,并尝试用 Javascript 解决它们。这样做我往往会产生许多无限循环,现在我想知道是否有比终止 Firefox 或 Chrome 中的选项卡更好的
有没有办法在程序执行期间生成一个交互式 python 控制台(最好是 iPython)而不暂停主程序并且能够检查和修改程序变量?类似于浏览器为 JavaScript 提供的功能。 我知道 pdb.se
我正在使用 FFmpeg @ Android 并希望能够进入 FFmpeg 代码(Eclipse + Seqouya),同时编译 FFmpeg 我使用 --disable-stripping --en
我从使用互操作调用 win32 api 函数的 .net 进程中得到一个异常。 我有一个调试器,我想查看 LastError 的值。 是否可以从 Visual Studio 调试器中查看 LastEr
我正在尝试通过 VBA 创建一个宏,以在 IE 的多个选项卡中打开一组指定的链接。目前我正在使用下面的代码,如果我试图打开 3 个或更少的选项卡,它大部分时间都可以工作。任何超过 3 的代码都会在“N
好的,这似乎是一个愚蠢的问题,因为 MonoDevelop 越来越成熟,所以我确定我只是想念它,但我环顾四周,所有关于这个主题的问题似乎都是关于远程调试或 Mac 上的调试。 我使用的是 Ubuntu
如何调试 Rscripts是从命令行运行的? 我目前正在使用 getopt传递命令行选项的包,当有错误时,我很难: 看看到底出了什么问题; 在 R 中交互式调试(因为脚本需要命令行选项。) 有没有人有
支持 PDF 和网络上的信息很少。我碰巧在博客中看到一篇文章,提到 $.write() 或 $.writeln() 将向 javascript 控制台写入一个字符串。相当有用。有谁知道这个 $ 对象是
PyCharm 1.5 中是否可以使用 Firefox 和 Chrome 支持的 JavaScript 调试? 如果是这样,它能否与 Python/Django 调试器一起有效运行? 如果没有,有没有
我确定这以前发生在人们身上,某些东西在 Debug模式下工作,你在发布时编译,但有些东西坏了。 这发生在我在嵌入式 XP 环境中工作时,我发现最好的方法确实是编写一个日志文件来确定它会出错的地方。 您
我目前正在为即将到来的项目评估 Flow3。 AOP 模式和依赖注入(inject)将非常适合我们的目的。 现在我想不通的是如何在 Controller Action 中调试一些结果。 public
最初,我有一个包含测试服务器的 Django 应用程序。要调试此设置,我只需添加 import pdb; pdb.set_trace()代码中的任何位置,并且有一个断点将我扔到终端中的交互式调试器中(
我是一名优秀的程序员,十分优秀!