Ray-casting algorithm: Difference between revisions
Content added Content deleted
(Kotlin: some improvements) |
|||
Line 1,748: | Line 1,748: | ||
data class Edge(val s: Point, val e: Point) { |
data class Edge(val s: Point, val e: Point) { |
||
operator fun invoke(p: Point) : Boolean = when { |
|||
s.y > e.y -> Edge(e, s).invoke(p) |
s.y > e.y -> Edge(e, s).invoke(p) |
||
p.y == s.y || p.y == e.y -> invoke(Point(p.x, p.y + epsilon)) |
p.y == s.y || p.y == e.y -> invoke(Point(p.x, p.y + epsilon)) |
||
Line 1,763: | Line 1,763: | ||
} |
} |
||
class Figure(val name: String, val edges: Array<Edge>) { |
|||
operator fun contains(p: Point) = edges.count({ it(p) }) % 2 != 0 |
|||
} |
} |
||
object Ray_casting { |
object Ray_casting { |
||
fun check(figures : Array<Figure>, points : List<Point>) { |
|||
println("points: " + points) |
println("points: " + points) |
||
figures.forEach { f -> |
figures.forEach { f -> |
||
println("figure: " + f.name) |
println("figure: " + f.name) |
||
f.edges.forEach { println(" " + it) } |
f.edges.forEach { println(" " + it) } |
||
println("result: " + (points.map { |
println("result: " + (points.map { it in f })) |
||
} |
} |
||
} |
} |
||
val epsilon = 0.00001 |
|||
}</lang> |
}</lang> |
||
<lang scala>package ray_casting |
<lang scala>package ray_casting |