首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#中二维平面对角线的线交点

C#中二维平面对角线的线交点
EN

Stack Overflow用户
提问于 2012-07-30 18:11:00
回答 2查看 1.4K关注 0票数 0

假设一个2D网格,其左上角单元格为(0,0)。选择任意两个点/坐标,并在每个点上画一个对角线和反对角线。它们可能在网格内部或外部相交。

在附图中,红线是对这两个点(300,200)和(700,800)的对角线。

如何找出对角线交叉口的坐标?此外,如果直线的斜率为负值,公式会有什么区别?

我将在一个需要高度优化的算法中使用这个方法,这样正确的答案将是最快的计算方法。我不确定这不需要三角测量就能完成。

注意:请记住红线是一个真正的对角线/反对角线对。换句话说,它们与矩形成45度角。这可能有助于也可能无助于选择比矢量计算更优化的公式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-30 18:20:11

D是两边长度之差。以你的身材,D=200。这是两个白色三角形(外部交点和矩形之间的三角形)的低音长度。因此,这些三角形的边长是D/sqrt(2),所以外部交叉口的坐标与D/2的矩形角不同。

那么对于你的图表,

代码语言:javascript
运行
复制
(x1,y1) = 300-D/2, 200+D/2 = 200,300
(x2,y2) = 700+D/2, 800-D/2 = 800,700

您必须处理所有可能的方向(x1<x2x1>x2,.)但它们都是对称的。

票数 3
EN

Stack Overflow用户

发布于 2012-07-30 18:21:30

只是数学而已。你有两行方程

代码语言:javascript
运行
复制
y1 = k1 * x1 + b1
y2 = k2 * x2 + b2
If they intersect then y1 == y2 and x1 = x2 so
k1 * x1 + b1 = k2 * x1 + b2
x1 = (b2 - b1) / (k1 - k2)

现在唯一的问题是如何找到k1,k2,b1,b2?很简单!每一行有2分(来自graphics.DrawLine(x1、y1、x2、y2))。在这里用它们。第一行:

代码语言:javascript
运行
复制
y1 = k * x1 + b
y2 = k * x2 + b
b = y1 - k * x1
y2 = k * x2 + y1 - k * x1 = k * (x2-x1) + y1
so
k = (y2 - y1) / (x2 - x1)

k替换为b = y1-k*x1,您将得到计算精确碰撞点所需的所有值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11727151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档