- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个小游戏,它需要一个函数来计算两条线的交点。所以我从维基百科 (http://en.wikipedia.org/wiki/Line-line_intersection) 中获取了这个公式,并将其变成了一个函数。
bool lineline(int L1X1, int L1Y1, int L1X2, int L1Y2, int L2X1, int L2Y1, int L2X2, int L2Y2, int* X, int* Y) { // Returns the point of intersection of two lines
int D = (L1X1 - L1X2) * (L2Y1 - L2Y2) - (L1Y1 - L1Y2) * (L2X1 - L2X2); // Denominator. If zero then no intersection
if (D == 0) { // Parallel and possibly overlapping
return false;
} else {
*X = ( (L1X1 * L1Y2 - L1Y1 * L1X2) * (L2X1 - L2X2) - (L1X1 - L1X2) * (L2X1 * L2Y2 - L2Y1 * L2X2) ) / D; // Calculate x
*Y = ( (L1X1 * L1Y2 - L1Y1 * L1X2) * (L2Y1 - L2Y2) - (L1Y1 - L1Y2) * (L2X1 * L2Y2 - L2Y1 * L2X2) ) / D; // Calculate y
std::cout << D << " | " << *X << " | " << *Y << "\n";
if (*X >= Bmin(L1X1, L1X2) && *X <= Bmax(L1X1, L1X2) && *Y >= Bmin(L1Y1, L1Y2) && *Y <= Bmax(L1Y1, L1Y2)) {
// Intersection is on first line
if (*X >= Bmin(L2X1, L2X2) && *X <= Bmax(L2X1, L2X2) && *Y >= Bmin(L2Y1, L2Y2) && *Y <= Bmax(L2Y1, L2Y2)) {
// Intersection is on second line
return true;
} else {
// Intersection is on first, but not on second line
return false;
}
} else {
// Intersection is not on first line.
return false;
}
return true;
}
}
它工作得很好,例如当我用这些参数调用它时它返回 true
lineline(400, 0, 400, 2000, 0, 400, 2000, 400, &x, &y);
但是,当我将第二行向上移动 1300 个单位时...
lineline(400, 0, 400, 2000, 0, 1700, 2000, 1700, &x, &y) == false;
它返回错误。虽然第二个函数调用的两条线应该相交,对吧?它使用这些参数计算的值是:
D = -4000000
*X = 400;
*Y = -447;
谁能帮我解决这个问题?我已经坚持这一天了,我可能只是错过了一些简单的东西,就像上次一样,但我看不到它。提前致谢!
最佳答案
该公式将输入数字之间的差异提高到三次,因此如果差异大约为三位数,则应小心溢出具有九位数字的 int
加上第一位digit 最多可以达到 2。一旦 int
溢出,您就会开始看到负数是正数相乘的结果,因此您的其余计算将变得不正确。
要扩大范围,请使用 64 位整数(即 long long
)作为中间结果。
关于c++ - 维基百科的线交公式不能处理大数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15172582/
我不知道在互联网上搜索此类 friend 的正确关键字,仅靠关键字 friend 不会带来预期的结果。 class Integer { friend int; }; friend int 是什么
我有两个数组,我想知道它们是否具有共同元素的最简单方法。所以实际上这个问题必须要提问。 string[] countries1 = new string[] { "USA", "Uruguay", "
我需要一个很好的资源来阅读如何创建一个算法来获取两条折线(一条由多条线组成的路径)并在它们之间执行并集、减法或交集。这与自定义 API 相关,因此我需要了解底层算法。 此外,任何 VB 方言的源代码都
我有一个生成简单 JPEG 图像的 C# 应用程序。我需要能够存储这些图像并在未来的不同时间调用它们。因此,我正在寻找一个交 key 的、安全的 CDN 系统。我已经将自己的服务器与 Windows
我是 ARKit 的新手,在检查了一些示例代码后,如 https://developer.apple.com/sample-code/wwdc/2017/PlacingObjects.zip我想知道是
例如,我想知道绿色是否会是在 div 标记内的字符 AAA 和 BBB 上,用于所有文档类型,例如 xhtml、html5、html? AAABBB 但我试过了,AAA 将是绿色,BBB 将是黑色作为
来 self 的问题 Insert element to ArrayList with ascending order and no duplicate elements 我已经完成了插入方法。 现在
我正在使用 Adobe LiveCycle ES 2 交 key 项目,它在 JBoss AS 4.2.1.GA 上运行。我在让 JNDI 绑定(bind)在 JBoss 中工作时遇到问题。这似乎
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。 去年关闭
我正在帮助一家典型的小公司,该公司从几个外包系统(谷歌应用程序、svn/trac)开始。添加了一个内部 jabber 服务器(ejabber 主要用于 iChat 客户端)。订阅几个网络服务(例如 h
假设我有以下代码(一个简单的 CRTP 类层次结构)。我想对基类类型进行 typedef 以节省自己的输入(在我的实际代码中,我多次使用基类类型并且基类采用多个模板参数),并且我需要与基类交 frie
我是一名优秀的程序员,十分优秀!