commonMain.primitives.Tear.kt Maven / Gradle / Ivy
The newest version!
package org.openrndr.extra.shapes.primitives
import org.openrndr.math.LinearType
import org.openrndr.math.Polar
import org.openrndr.math.Vector2
import org.openrndr.shape.Circle
import org.openrndr.shape.LineSegment
import org.openrndr.shape.ShapeContour
class Tear(val point: Vector2, val circle: Circle) : LinearType {
override fun div(scale: Double) = Tear(point / scale, circle / scale)
override fun times(scale: Double) = Tear(point * scale, circle * scale)
override fun plus(right: Tear) = Tear(point + right.point, circle + right.circle)
override fun minus(right: Tear) = Tear(point - right.point, circle - right.circle)
val contour: ShapeContour
get() {
val tangents = circle.tangents(point)
var k = LineSegment(point, tangents.first).contour
run {
val th0 = Polar.fromVector(tangents.first - circle.center).theta
var th1 = Polar.fromVector(tangents.second - circle.center).theta
if (th1 < th0) th1 += 360.0
k += Arc(circle.center, circle.radius, th0, th1).contour
}
k += LineSegment(tangents.second, point).contour
return k.close()
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy