mirror of
https://github.com/jhasse/poly2tri.git
synced 2025-03-13 14:34:46 +01:00
59 lines
2.3 KiB
Scala
59 lines
2.3 KiB
Scala
/* Poly2Tri
|
|
* Copyright (c) 2009, Mason Green
|
|
* http://code.google.com/p/poly2tri/
|
|
*
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
* * Neither the name of Poly2Tri nor the names of its contributors may be
|
|
* used to endorse or promote products derived from this software without specific
|
|
* prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
package org.poly2tri
|
|
|
|
case class Point(val x: Float, val y: Float) {
|
|
|
|
// Pointers to next and previous points in Monontone Mountain
|
|
var next, prev: Point = null
|
|
|
|
def -(p: Point) = Point(x - p.x, y - p.y)
|
|
def +(p: Point) = Point(x + p.x, y + p.y)
|
|
def +(f: Float) = Point(x + f, y + f)
|
|
def -(f: Float) = Point(x - f, y - f)
|
|
def *(f: Float) = Point(x * f, y * f)
|
|
def /(a: Float) = Point(x / a, y / a)
|
|
def cross(p: Point) = x * p.y - y * p.x
|
|
def dot(p: Point) = x * p.x + y * p.y
|
|
def length = Math.sqrt(x * x + y * y).toFloat
|
|
def normalize = this / length
|
|
|
|
def <(p: Point) = {
|
|
if(p.x == x)
|
|
if(y <= p.y) true
|
|
else false
|
|
else
|
|
(x < p.x)
|
|
}
|
|
|
|
override def clone = Point(x, y)
|
|
}
|