【问题标题】:How to generate a Random Floating point Number in range, Swift如何在范围内生成随机浮点数,Swift
【发布时间】:2016-01-25 19:42:13
【问题描述】:

我对 Swift 还很陌生,之前只使用过 Python 和 Pascal。我想知道是否有人可以帮助生成范围内的浮点数。我知道这不能直接完成。所以这就是我创造的。但是,它似乎不起作用。

func location() {
    // let DivisionConstant = UInt32(1000)

    let randomIntHeight = arc4random_uniform(1000000) + 12340000
    let randomIntWidth = arc4random_uniform(1000000) + 7500000

    XRandomFloat = Float(randomIntHeight / UInt32(10000))
    YRandomFloat = Float(randomIntWidth / UInt32(10000))

    randomXFloat = CGFloat(XRandomFloat)
    randomYFloat = CGFloat(YRandomFloat)

    self.Item.center = CGPointMake(randomXFloat, randomYFloat)
}

看起来,当我运行它时,它并没有除以DivisionConstant 的值,所以我对此进行了评论并将其替换为原始值。但是,self.Item 仍然出现在屏幕外。任何建议将不胜感激。

【问题讨论】:

  • “它似乎不起作用”和“看起来......”是相当模糊的问题描述。你得到什么价值,你期望什么? – 问题本身(例如)在这里得到回答:How does one make random number between range for arc4random_uniform()?.
  • 对不起,感谢您的快速回复,我的意思是我正在将其作为 iPhone 屏幕视图进行操作,并且我希望它不接触边缘,因此距离边缘 100px ,不幸的是,我已经尝试了我当前的代码,它似乎是在可见屏幕上生成的,它不应该给出尺寸等。我本来希望它会显示在屏幕上,只是碰不到边缘,但是它没有按预期进行。我查看了附加的链接,但我的问题更多是为什么它没有显示在屏幕上。我很抱歉模棱两可,谢谢,@MartinR
  • 不,它的UIKit在单视图应用@LeoDabus下
  • 我正在尝试创建一个 CGPoint,所以我需要一个 X 坐标和一个 Y 坐标,它们必须从 100 - 1234 和 100 - 750 @LeoDabus 开始

标签: ios swift


【解决方案1】:

这个划分可能不是你想要的:

XRandomFloat = Float(randomIntHeight / UInt32(10000))

这会执行 integer 除法(丢弃任何余数),然后将结果转换为浮点数。你的意思可能是:

XRandomFloat = Float(randomIntHeight) / Float(10000)

这是一个浮点数,粒度约为 1/10000。

您的初始代码:

let randomIntHeight = arc4random_uniform(1000000) + 12340000

生成一个介于 12340000 和 (12340000+1000000-1) 之间的随机数。鉴于您的最终缩放比例,这意味着 1234 和 1333 的范围。这对于您的最终目标来说似乎很奇怪。我假设你的意思只是 arc4random_uniform(12340000),但我可能误解了你的目标。


考虑到你的 cmets,我认为你把这件事复杂化了。假设您想要一个整数(即非小数)点,以下内容应该会在屏幕上为您提供一个随机点,这几乎总是您想要的:

let bounds = UIScreen.mainScreen().bounds

let x = arc4random_uniform(UInt32(bounds.width))
let y = arc4random_uniform(UInt32(bounds.height))
let randomPoint = CGPoint(x: CGFloat(x), y: CGFloat(y))

您的问题是您将最大值添加到随机值中,所以它当然总是在屏幕外。

【讨论】:

  • 我正在努力做到这一点,以便我可以在屏幕上显示和图像。要制作 CGPoint,我需要 X 轴和 Y 轴都使用 CGFloat,我试图为两者生成随机值,以便它显示在 iPhone 屏幕上的随机位置,但是,它出现在屏幕外,由于我不知道的原因,我正在寻求帮助 A. 为 CGPointMake 制作 CGFloats,以及 B. 找出它为什么会在屏幕外炫耀。我认为通过进行除法,我可以制作 CGFloats,但我并不完全清楚,您能建议吗?
  • 非常感谢,这是否意味着物体和屏幕边缘之间至少有 k 的间隙?
  • 什么是“k”?如果要调整数字以适合某个范围,请添加所需的最小值,并减少最大值以适合该范围。在 arc4random_uniform 上查找文档。这段代码在做什么应该很明显。如果不是,您需要回到基础 (raywenderlich.com/category/swift)。
  • 哦 K 只是我选择的一个随机字母来表示与边缘的距离,在数学中 K 用于表示一个常数,对不起,这个不清楚
【解决方案2】:

我不确定您希望生成什么数字,但您得到的结果如下:

1317.0, 764.0
1237.0, 795.0
1320.0, 814.0
1275.0, 794.0
1314.0, 758.0
1300.0, 758.0
1260.0, 809.0
1279.0, 768.0
1315.0, 838.0
1284.0, 763.0
1273.0, 828.0
1263.0, 770.0
1252.0, 776.0
1255.0, 848.0
1277.0, 847.0
1236.0, 847.0
1320.0, 772.0
1268.0, 759.0

然后您将其用作 UI 元素的中心。除非它非常大,否则它可能会在屏幕外。

【讨论】:

  • 谢谢,我以前印象中iPhone 6的屏幕边缘是1334 x 750,要偏移100以免完全碰到边缘,你能建议吗?使用哪些数字是合理的?我认为它可能会生成 9368231、4139023,然后除以 10000 以使坐标 936.8231、412.9023 给我一个 CGFloat,然后我可以将其用于 CGPointMake。谢谢,乔尼
猜你喜欢
  • 1970-01-01
  • 2013-12-20
  • 2015-10-10
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多