【发布时间】:2019-07-29 19:44:09
【问题描述】:
我有一个矩形,想:
- 在一侧(任意)边上随机取一个点。
- 在一侧(除了之前选择的一侧)随机获取一个点。
我最初的方法是为每个可能的边创建数组。
var arr:Array = [[{x:0,y:0}, // Top
{x:width,y:0}], //
[{x:width,y:0}, // Right
{x:width,y:height}], //
[{x:width,y:height}, // Bottom
{x:0,y:height}], //
[{x:0,y:height}, // Left
{x:0,y:0}]]; //
然后,我得到双方。
rand 是Rand 的一个实例,具有以下方法:
.next() 提供介于 0 和 1 之间的随机数
.between(x,y) 返回一个介于x 和y 之间的随机数。
var firstSide:Array = arr[rand.next() * arr.length];
var secondSide:Array;
do {
secondSide = arr[rand.next() * arr.length];
} while(secondSide.equals(firstSide));
最后,我计算我的分数。
var pointOnFirstSide:Object = {x:rand.between(firstSide[0].x, firstSide[1].x),
y:rand.between(firstSide[0].y, firstSide[1].y};
var pointOnSecondSide:Object = {x:rand.between(secondSide[0].x, secondSide[1].x),
y:rand.between(secondSide[0].y, secondSide[1].y};
我认为这不是解决这个问题的最有效方法。
你会怎么做?
【问题讨论】:
-
好吧,为清楚起见进行了编辑。我还没有运行它,但我正在尝试为这段代码了解一个一般概念。我会经常运行它并希望它高效。
-
当它们相等时,我在 do while 循环中运行它们。当它们不相等时,循环中断并且代码继续。编辑:从来都不是
!==,而是== -
随机性如何?如果
t和b的边长是l和r的五倍,您是否希望选择其中之一的机会高五倍?或者您希望有同等机会选择四个边中的任何一个,然后有同等机会选择其余三个边之一? -
这是个好主意。我现在不是在处理一个正方形,但它足够接近,不会产生太大的影响。现在机会均等(为简单起见)。
-
您的矩形是否始终与 x 和 y 轴对齐?如果不是,您选择的点几乎肯定不会位于矩形的边上。在任何情况下,当您只应该选择一个时,您每个点都选择了两个随机数。
标签: javascript arrays typescript math language-agnostic