All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.mdr.ascii.common.Point.scala Maven / Gradle / Ivy

The newest version!
package com.github.mdr.ascii.common

object Point {

  private def sameColumn(p1: Point, p2: Point, p3: Point) = p1.column == p2.column && p2.column == p3.column
  private def sameRow(p1: Point, p2: Point, p3: Point) = p1.row == p2.row && p2.row == p3.row
  private def colinear(p1: Point, p2: Point, p3: Point) = sameColumn(p1, p2, p3) || sameRow(p1, p2, p3)

  def removeRedundantPoints(points: List[Point]): List[Point] = points match {
    case List() | List(_) | List(_, _)                       ⇒ points
    case p1 :: p2 :: p3 :: remainder if colinear(p1, p2, p3) ⇒ removeRedundantPoints(p1 :: p3 :: remainder)
    case p :: ps                                             ⇒ p :: removeRedundantPoints(ps)
  }

}

case class Point(row: Int, column: Int) extends Translatable[Point] with Transposable[Point] {

  def maxRowCol(that: Point): Point = Point(math.max(this.row, that.row), math.max(this.column, that.column))

  type Self = Point

  def translate(down: Int = 0, right: Int = 0): Point = Point(row + down, column + right)

  def transpose: Point = Point(column, row)

  def neighbours: List[Point] = List(up, right, down, left)

  def withRow(newRow: Int) = copy(row = newRow)

  def withColumn(newColumn: Int) = copy(column = newColumn)

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy