c# - 为什么我的 C# 计算以 NaN 形式返回?
问题描述
我正在Coursera 上上C# Unity 课程,第一个任务是全神贯注。是的,我是编程新手,所以请放慢我的脚步。
我正在尝试计算两个字符位置之间的斜边距离。
我被迫为了两个 Y 点使用 5 5 和两个 X 点使用 4 4。
首先,我通过从 point1Y 中减去 point2Y 来计算 deltaY,然后通过对 X 点执行相同的操作来计算 deltaX。
然后,我需要将距离保存为浮点数,因此使用强制转换,我布置了勾股定理公式来找到距离。
但是,我一直得到 5 5 4 4 的正确答案,但是当我需要为 Y 使用 2 2 和为 XI 使用 4 4 时,得到NaN。
这是因为我得到了一个不应该出现的负数。任何帮助,将不胜感激!
我的代码如下
float point1X = 5;
float point1Y = 5;
float point2X = 4;
float point2Y = 4;
double deltaX = point2X - point1X;
double deltaY = point2Y - point1Y;
float distance = (float) (Math.Sqrt(Math.Sqrt(deltaX) + Math.Sqrt(deltaY)));
Console.WriteLine(distance);
解决方案
您需要更新两点之间距离的定义。现在是不正确的。它应该是 delta 的 2 次方(而不是平方根)。
float distance = (float) (Math.Sqrt(deltaX * deltaX + deltaY * deltaY));
或者
float distance = (float) (Math.Sqrt(Math.Pow(deltaX, 2.0) + Math.Pow(deltaY, 2.0)));
顺便说一句,正如评论中提到的,负值的平方根(可能是deltaX
or deltaY
)是你得到的错误的来源。
推荐阅读
- image-processing - 使用 YOLO 制作应用程序
- docker - 使用 gcsfuse 挂载时 Docker 文件已存在
- c++ - 在 g++ 中使用花括号声明 int 变量时出错
- css - 如何使表内的块响应?
- c# - 加载用户丢失的最后一个播放场景,而不是重新加载开始场景,Unity Block Breaker 游戏
- android - EditText fromHtml 无法将 & 转换为 &
- asp.net - 如何使用 Angular 2/4 开发搜索建议文本框
- javascript - Javascript SVG在贝塞尔曲线上放置箭头
- hadoop - 将数据从 HDFS 复制到 Hive 中的外部表时出错
- pentaho - Pentaho 报告:Pentaho 报告中的列受到限制