Random 在已知边界的图形中查找随机x,y坐标

Random 在已知边界的图形中查找随机x,y坐标,random,coordinates,figure,boundary,Random,Coordinates,Figure,Boundary,目标是在形状未知的图形中查找坐标。已知的是该地物边界的坐标列表,例如: 边界=[(0,0)、(1,0)、(2,0)、(3,0)、(3,1)、(3,2)、(3,3)、(2,3)、(2,2)、(1,2)、(1,3)、(0,3)、(0,2)、(0,1] 看起来是这样的: 这是一个非常基本的例子,我想用大量不同类型的数字来做 问题是如何在不硬编码图形形状的情况下获得图形内的随机坐标,因为这在一开始是未知的?有没有办法确定或者估计是最好的选择?我将如何实现这样的估计?这里是初步的答案。您可以分两步对数字

目标是在形状未知的图形中查找坐标。已知的是该地物边界的坐标列表,例如:

边界=[(0,0)、(1,0)、(2,0)、(3,0)、(3,1)、(3,2)、(3,3)、(2,3)、(2,2)、(1,2)、(1,3)、(0,3)、(0,2)、(0,1]

看起来是这样的:

这是一个非常基本的例子,我想用大量不同类型的数字来做


问题是如何在不硬编码图形形状的情况下获得图形内的随机坐标,因为这在一开始是未知的?有没有办法确定或者估计是最好的选择?我将如何实现这样的估计?

这里是初步的答案。您可以分两步对数字进行编码

之前,做准备工作-将你的图形分割成简单的基本对象。在你的例子中,你将它分割成矩形,通常人们会将它分割成三角形

所以你有许多简单的物体,每个物体的面积都是Ai,总面积A=Sum(Ai)

第一个采样步骤-选择从中拾取点的矩形。 在一些伪代码中

r = randomU01(); // random value in [0...1) range
for(i in N) {
    r = r - A_i/A;
    if (r <= 0) {
        k = i;
        break;
    }
}
r1 = randomU01();
s1 = sqrt(r1);
r2 = randomU01();

x = (1.0-s1)*A.x + s1*(1.0-r2)*B.x + r2*s1*C.x;
y = (1.0-s1)*A.y + s1*(1.0-r2)*B.y + r2*s1*C.y;

return (x,y);
就是这样。非常类似于三角化图形的技术

矩形选择可以通过二进制搜索或更复杂的搜索来优化

更新

如果你的边界是通用的,那么唯一好的方法就是使用任何好的库(f.e.)对你的多边形进行三角化,然后根据面积选择一个三角形(步骤1),然后使用两个随机的U01数字r1和r2对三角形中的点进行均匀采样

P = (1 - sqrt(r1)) * A + (sqrt(r1)*(1 - r2)) * B + (r2*sqrt(r1)) * C
i、 例如,在伪代码中

r = randomU01(); // random value in [0...1) range
for(i in N) {
    r = r - A_i/A;
    if (r <= 0) {
        k = i;
        break;
    }
}
r1 = randomU01();
s1 = sqrt(r1);
r2 = randomU01();

x = (1.0-s1)*A.x + s1*(1.0-r2)*B.x + r2*s1*C.x;
y = (1.0-s1)*A.y + s1*(1.0-r2)*B.y + r2*s1*C.y;

return (x,y);

这是一个初步的答案。你可以分两步来抽样

之前,做准备工作-将你的图形分割成简单的基本对象。在你的例子中,你将它分割成矩形,通常人们会将它分割成三角形

所以你有许多简单的物体,每个物体的面积都是Ai,总面积A=Sum(Ai)

第一个采样步骤-选择从中拾取点的矩形。 在一些伪代码中

r = randomU01(); // random value in [0...1) range
for(i in N) {
    r = r - A_i/A;
    if (r <= 0) {
        k = i;
        break;
    }
}
r1 = randomU01();
s1 = sqrt(r1);
r2 = randomU01();

x = (1.0-s1)*A.x + s1*(1.0-r2)*B.x + r2*s1*C.x;
y = (1.0-s1)*A.y + s1*(1.0-r2)*B.y + r2*s1*C.y;

return (x,y);
就是这样。非常类似于三角化图形的技术

矩形选择可以通过二进制搜索或更复杂的搜索来优化

更新

如果你的边界是通用的,那么唯一好的方法就是使用任何好的库(f.e.)对你的多边形进行三角化,然后根据面积选择一个三角形(步骤1),然后使用两个随机的U01数字r1和r2对三角形中的点进行均匀采样

P = (1 - sqrt(r1)) * A + (sqrt(r1)*(1 - r2)) * B + (r2*sqrt(r1)) * C
i、 例如,在伪代码中

r = randomU01(); // random value in [0...1) range
for(i in N) {
    r = r - A_i/A;
    if (r <= 0) {
        k = i;
        break;
    }
}
r1 = randomU01();
s1 = sqrt(r1);
r2 = randomU01();

x = (1.0-s1)*A.x + s1*(1.0-r2)*B.x + r2*s1*C.x;
y = (1.0-s1)*A.y + s1*(1.0-r2)*B.y + r2*s1*C.y;

return (x,y);

欢迎使用StackOverflow。请提供一个您尝试过的示例。阅读并提供一个。同时确保您已使用语言正确标记此示例。欢迎使用StackOverflow。请提供一个您尝试过的示例。阅读并提供一个。同时确保您已使用语言正确标记此示例。我明白您的意图ing,但我还不知道如何获得矩形,你唯一的知识是边界的te坐标。你可以迭代boudary的所有坐标,生成宽度为1的矩形,然后向下到达它遇到的第一个边界,但如果这是有效的,请idk。谢谢!我现在就尝试实现它!我知道你要去哪里,但我不知道我还不知道如何获得矩形,你唯一的知识是边界的te坐标。你可以迭代边界的所有坐标,生成宽度为1的矩形,然后向下到达它遇到的第一个边界,但如果这是有效的,请点击idk。谢谢!我现在就尝试实现它!