假设你有一个带有2个点(称为a和b)的二维平面,它由x整数和每个点的y整数表示.
如何确定a和b定义的线段上是否有另一个点c?
我最常使用python,但任何语言的示例都会有所帮助.
我很疯狂地计算沿着给定线AB的点,在离A的给定距离处,这样我就可以"绘制"两个给定点之间的线.一开始听起来很简单,但我似乎无法做到这一点.更糟糕的是,我不明白我哪里出错了.几何(和一般的数学)不是我强大的套件.
我已经阅读了类似的问题,并在那里有答案.事实上,我直接从Mads Elvheim的回答中解除了我对CalculatePoint函数的当前实现:给定一个起点和终点,以及一个距离,计算沿线的一个点(加上后面的注释中的修正 - 如果我理解正确的话)因为我的独立尝试解决问题让我无处可去,除了一流的快递票务frusterpationland.
这是我的更新代码(请参阅EDIT备注帖子的底部):
using System;
using System.Drawing;
using System.Windows.Forms;
namespace DrawLines
{
public class MainForm : Form
{
// =====================================================================
// Here's the part I'm having trouble with. I don't really understand
// how this is suposed to work, so I can't seem to get it right!
// ---------------------------------------------------------------------
// A "local indirector" - Just so I don't have go down and edit the
// actual call everytime this bluddy thing …Run Code Online (Sandbox Code Playgroud) 我一直在努力研究如何检查一个点是否在同一条线上以及其他两个点之间。如果这条线是对角线,它似乎有效,但如果它在垂直或水平方向是直的,它就会失败。
这是我的方法:
public bool isBetween(Vector3 C, Vector3 A, Vector3 B)
{
Vector3 sum = Vector3.Cross(A,B) + Vector3.Cross(A,C) + Vector3.Cross(B,C);
if (sum.x == 0 && sum.z == 0 && sum.y == 0)
{
Vector3 min = Vector3.Min(A, B);
Vector3 max = Vector3.Max(A, B);
// only checking 2 dimensions
if (C.x > min.x && C.x < max.x && C.z > min.z && C.z < max.z)
{
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
它适用于某些情况,但不是 100% 适用于所有情况。不知道如何修复它以使其正常工作。