Constrained random points on a circle: Difference between revisions

Content added Content deleted
(→‎{{header|REXX}}: used a template for the output section, elided version 0 (which didn't use an aspect ratio), added/changed comments and whitespace.)
(Add Swift)
Line 3,581: Line 3,581:
1 1 1
1 1 1
1
1
</pre>

=={{header|Swift}}==

{{trans|Rust}}

<lang swift>let nPoints = 100

func generatePoint() -> (Int, Int) {
while true {
let x = Int.random(in: -15...16)
let y = Int.random(in: -15...16)
let r2 = x * x + y * y

if r2 >= 100 && r2 <= 225 {
return (x, y)
}
}
}

func filteringMethod() {
var rows = [[String]](repeating: Array(repeating: " ", count: 62), count: 31)

for _ in 0..<nPoints {
let (x, y) = generatePoint()

rows[y + 15][x + 15 * 2] = "*"
}

for row in rows {
print(row.joined())
}
}

func precalculatingMethod() {
var possiblePoints = [(Int, Int)]()

for y in -15...15 {
for x in -15...15 {
let r2 = x * x + y * y

if r2 >= 100 && r2 <= 225 {
possiblePoints.append((x, y))
}
}
}

possiblePoints.shuffle()

var rows = [[String]](repeating: Array(repeating: " ", count: 62), count: 31)

for (x, y) in possiblePoints {
rows[y + 15][x + 15 * 2] = "*"
}

for row in rows {
print(row.joined())
}
}

print("Filtering method:")
filteringMethod()

print("Precalculating method:")
precalculatingMethod()</lang>

{{out}}

<pre>Filtering method:
*
** *
** ** *
* ** * *
** * *
* ** **
* *
*
* ** *
* *
* * * ***
*
* * *
**
* *
* *
*
* * *
*
* **
*
* * *
* *
*
** **
* **
*** * *
* ** * *
* *
* * *
*
Precalculating method:
*
***********
***************
*******************
*********************
***********************
******** ********
******* *******
****** ******
****** ******
****** ******
***** *****
***** *****
***** *****
***** *****
****** ******
***** *****
***** *****
***** *****
***** *****
****** ******
****** ******
****** ******
******* *******
******** ********
***********************
*********************
*******************
***************
***********
*
</pre>
</pre>