我有一组坐标:
d1 <- data_frame(
title = c("base1", "base2", "base3", "base4"),
lat = c(57.3, 58.8, 47.2, 57.8, 65.4, 56.7, 53.3),
long = c(0.4, 3.4, 3.5, 1.2, 1.5, 2.6, 2.7))
Run Code Online (Sandbox Code Playgroud)
我想知道坐标是落在陆地上,在海中还是在海岸线内3英里处。坐标应该在英国的某个地方,所以我知道我需要绘制英国的形状文件并将其绘制在上面。
我只是不知道如何测量这些点是落在海洋,陆地还是在距海岸2英里的地方。显然,从查看地图可以看出它们落在哪里,但是我想在数据集中添加另一列,如下所示:
d2 <- data_frame(
title = c("base1", "base2", "base3", "base4", "base5", "base6", "base7"),
lat = c(57.3, 58.8, 47.2, 57.8, 65.4, 56.7, 53.3),
long = c(0.4, 3.4, 3.5, 1.2, 1.5, 2.6, 2.7),
where = c("land", "land", "sea", "coast", "land", "sea", "coast"))
Run Code Online (Sandbox Code Playgroud)
我最近正在开发一个项目,该项目有一个算法来判断一个点是否在一个区域内.
该区域如下所示:
{"state": "Washington", "border": [[-122.402015, 48.225216], [-117.032049, 48.999931], [-116.919132, 45.995175], [-124.079107, 46.267259], [-124.717175, 48.377557], [-122.92315, 47.047963], [-122.402015, 48.225216]]}
Run Code Online (Sandbox Code Playgroud)
如果该区域是矩形,则很容易.但是,该地区是不规则的.我的想法之一是检查一个点是否在该区域的每一行的"内部"侧.但是,表现并不好.任何的想法?
我想知道是否存在针对此问题的现有算法,或者是否可以将其映射到现有算法。
您在 2D 环境中,想使用木板上的钉子制作一些弦乐艺术。为此,您从集合中的某个钉子开始,所有这些钉子都被不规则地放在板上。然后围绕钉板以离散的步骤线性移动,直到到达末端钉子。现在,您拧紧绳子并想知道绳子的路径以及绳子接触的钉子。
输出:拉紧的绳子及其钉子的路径。
示例:橙色路径是您绕着棋盘走的那条线。绿线是最后收紧的绳子。请注意,由于采用的路径,直接连接(如以钉子 X 开头)是非法的。
另一个类比:你在树林里的一棵树上固定一根绳子。然后你以线性块在树上奔跑。你停在一棵树上,用力拉绳子,所以它被拉紧了。
这个问题似乎是一个最短路径问题,但有一个额外的约束,即只能使用一些节点/钉子。
我想弄清楚如何最好地做到这一点,如果我在2d平面上有一个矢量(由2个点组成的线),我如何确定它是否已通过多边形?
我知道我可以采取构成多边形的每一条线,看看是否有任何相交,但有更好的方法吗?
我已经阅读过这篇文章如何确定2D点是否在多边形内?这给了我一些想法,看看点是否在多边形内,但我需要看看它是否已经过了/相交了它.
我对技术细节并不感兴趣,我可能会在python中实现.
干杯
大卫
我有一个由边和顶点G组成的图。中的顶点以二维坐标表示。该图是平面的,这意味着没有两条边相交。{E}{V}{V}
图G有一些循环,假设一个点落在图的内部,如果它落入 的一个循环中G。循环示例可以是A---B---C---A,其中A、B和C是顶点,---是边。
现在给定一个点(x, y),如何确定它是在图内还是在图外?最好的方法或最简单的方法是什么?
我正在使用Python,如果有帮助的话。
更新:是的,所有边缘都是直线。
我做了一些研究,但找不到最有效的答案,盒对撞机 2D 还是圆形对撞机 2D?
有这个问题很快就得到了很好的答案,它说最快的是球体对撞机,其次是胶囊对撞机,然后是盒子对撞机,但我想知道 2D 对撞机。
2500 对撞机
胶囊 453-481ms
框 490-520ms
球体 190-233ms
有没有人有关于计算机处理哪个更快的信息?谢谢!
我正在 Jetpack compose 中为地图中的每个区域使用向量Groups 和s制作国家地图。Path我想要对特定区域的比例进行动画处理,但我很难设置正确的比例pivotX,并且pivotY属于Group应该动画变大和变小的正确区域,导致该区域也在 x 和 y 方向上移动。我的代码如下:
import androidx.compose.animation.core.EaseInOut
import androidx.compose.animation.core.RepeatMode
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.rememberInfiniteTransition
import androidx.compose.animation.core.tween
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.vector.Group
import androidx.compose.ui.graphics.vector.Path
import androidx.compose.ui.graphics.vector.PathNode
import androidx.compose.ui.graphics.vector.PathParser
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.unit.dp
typealias Province = String
object Netherlands {
val PathMap = mapOf<Province, List<List<PathNode>>>(
"Overijssel" to listOf(
PathParser().parsePathString(
"m144.01 59.386-1.162 0.77493-0.77463 0.77492h-1.162-0.38732l0.38732 0.77492v0.38746h-0.38732l-0.38731 0.38746-0.77463 0.38746v-0.77492l-1.162 0.38746-0.38732 0.38746v-0.38746h-0.38731l-0.38732-0.38746-0.38731-0.77492v-0.77492l-0.77464 …Run Code Online (Sandbox Code Playgroud) 我试图检测给定的点(x,y)是否在 n*2 数组的多边形中。但似乎多边形边界上的某些点返回它不包括在内。
def point_inside_polygon(x,y,poly):
n = len(poly)
inside =False
p1x,p1y = poly[0]
for i in range(n+1):
p2x,p2y = poly[i % n]
if y > min(p1y,p2y):
if y <= max(p1y,p2y):
if x <= max(p1x,p2x):
if p1y != p2y:
xinters = (y-p1y)*(p2x-p1x)/float((p2y-p1y))+p1x
if p1x == p2x or x <= xinters:
inside = not inside
p1x,p1y = p2x,p2y
return inside
Run Code Online (Sandbox Code Playgroud) 我遇到了这段 C 代码(我认为),这应该是检查点是否在 aconcave或convex多边形内的巧妙方法,我想将其转换为 JS 等效函数以在我的 JS 程序中使用:
int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy)
{
int i, j, c = 0;
for (i = 0, j = nvert-1; i < nvert; j = i++) {
if ( ((verty[i]>testy) != (verty[j]>testy)) &&
(testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
c = !c;
}
return c;
}
Run Code Online (Sandbox Code Playgroud)
nvert:多边形的顶点数。是否在最后重复第一个顶点。
vertx、verty:包含多边形顶点的 x 和 y 坐标的数组。
testx、testy:测试点的 X 和 y …
对不起我的英语,但我是意大利人...我想创建一个代码来计算点(具有两个坐标)是否在具有凹角和凸角的多边形内。我尝试了很少的代码,因为太难了..
var polygon = [
[71.99999994,38.999999714],
[71.000000057,38.999999714],
[69.999999998,38.999999714],
[69.999999998,38.000000007],
[68.999999939,38.000000007],
[67.99999988,38.000000007],
[67.99999988,38.999999714],
[67.99999988,39.999999597],
[68.999999939,39.999999597],
[68.999999939,41.000000008],
[69.999999998,41.000000008],
[71.000000057,41.000000008],
[71.99999994,41.000000008],
[71.99999994,39.999999597],
[71.99999994,38.999999714]
];
var point= [68,38.5];
Run Code Online (Sandbox Code Playgroud)
我希望你能帮助我...
非常感谢