- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我该如何编写这个函数?任何例子表示赞赏
function isPointBetweenPoints(currPoint, point1, point2):Boolean {
var currX = currPoint.x;
var currY = currPoint.y;
var p1X = point1.x;
var p1y = point1.y;
var p2X = point2.x;
var p2y = point2.y;
//here I'm stuck
}
最佳答案
假设 point1
和 point2
不同,首先检查点是否在直线上。为此,您只需要向量 point1 -> currPoint
和 point1 -> point2
的“叉积”。
dxc = currPoint.x - point1.x;
dyc = currPoint.y - point1.y;
dxl = point2.x - point1.x;
dyl = point2.y - point1.y;
cross = dxc * dyl - dyc * dxl;
当且仅当 cross
等于零时,你的点才在线上。
if (cross != 0)
return false;
现在,您知道该点确实位于直线上,现在是检查它是否位于原始点之间的时候了。这可以通过比较 x
坐标轻松完成,如果线“比垂直更水平”,否则比较 y
坐标
if (abs(dxl) >= abs(dyl))
return dxl > 0 ?
point1.x <= currPoint.x && currPoint.x <= point2.x :
point2.x <= currPoint.x && currPoint.x <= point1.x;
else
return dyl > 0 ?
point1.y <= currPoint.y && currPoint.y <= point2.y :
point2.y <= currPoint.y && currPoint.y <= point1.y;
请注意,如果输入数据是整数,则上述算法是完全整数的,即它不需要对整数输入进行浮点计算。不过,在计算 cross
时要小心潜在的溢出。
附言该算法绝对精确,这意味着它会拒绝非常靠近直线但不在直线上的点。有时这不是所需要的。但那是另外一回事了。
关于algorithm - 如何检查一个点是否位于另外两个点之间的一条线上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11907947/
如何迭代(一行)分割函数给我的每个类? 我试过这个: 编辑(抱歉) $("p").attr("class").split(' ').each (function (i,n){alert(n)}
我有一条垂直线和一条水平线,当我动态调整我的 Canvas 父级时,我想调整它们的大小。 (地标) 我希望水平线始终距 Canvas 的左右边界 25 处,距底部边界 13 处。 垂直线也是如此,距上
我有一个 y 变量,我试图在图形的顶部和底部针对两个相关的 x 轴绘制它(例如 y="立方体中的事物数",x1="立方体的边长", x2="立方体的体积")。我在 numpy 数组中有 y、x1、x2
我想画一条简单的水平线,并在这条线 flex 的地方制作动画。我有这个动画的视频。你能给我一些建议如何开始以及我必须使用哪个 js/css 吗? 都是关于矩形底部的线: http://www.stop
我是一名优秀的程序员,十分优秀!