[orx-shapes] Fix minimum number of points bug in RectifiedContour, expose lengthScale
This commit is contained in:
@@ -10,8 +10,8 @@ import kotlin.math.floor
|
|||||||
/**
|
/**
|
||||||
* RectifiedContour provides an approximately uniform parameterization for [ShapeContour]
|
* RectifiedContour provides an approximately uniform parameterization for [ShapeContour]
|
||||||
*/
|
*/
|
||||||
class RectifiedContour(val contour: ShapeContour, lengthScale: Double = 1.0, distanceTolerance: Double = 0.5) {
|
class RectifiedContour(val contour: ShapeContour, distanceTolerance: Double = 0.5, lengthScale: Double = 1.0, ) {
|
||||||
val points = contour.equidistantPositionsWithT((contour.length * lengthScale).toInt(), distanceTolerance)
|
val points = contour.equidistantPositionsWithT((contour.length * lengthScale).toInt().coerceAtLeast(2), distanceTolerance)
|
||||||
|
|
||||||
private fun safe(t: Double): Double {
|
private fun safe(t: Double): Double {
|
||||||
return if (contour.closed) {
|
return if (contour.closed) {
|
||||||
@@ -68,14 +68,17 @@ class RectifiedContour(val contour: ShapeContour, lengthScale: Double = 1.0, dis
|
|||||||
|
|
||||||
/** create a rectified contour
|
/** create a rectified contour
|
||||||
* @param distanceTolerance distance tolerance to use, 0.5 is the default distance tolerance
|
* @param distanceTolerance distance tolerance to use, 0.5 is the default distance tolerance
|
||||||
|
* @param lengthScale used to compute the size of the LUT, default value is 1.0
|
||||||
**/
|
**/
|
||||||
fun ShapeContour.rectified(distanceTolerance: Double = 0.5): RectifiedContour {
|
fun ShapeContour.rectified(distanceTolerance: Double = 0.5, lengthScale: Double = 1.0): RectifiedContour {
|
||||||
return RectifiedContour(this, distanceTolerance = distanceTolerance)
|
return RectifiedContour(this, distanceTolerance, lengthScale)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** create a rectified contour
|
/** create a rectified contour
|
||||||
* @param distanceTolerance distance tolerance to use, 0.5 is the default distance tolerance
|
* @param distanceTolerance distance tolerance to use, 0.5 is the default distance tolerance
|
||||||
|
* @param lengthScale used to compute the size of the LUT, default value is 1.0
|
||||||
|
*
|
||||||
* */
|
* */
|
||||||
fun Segment.rectified(distanceTolerance: Double = 0.5): RectifiedContour {
|
fun Segment.rectified(distanceTolerance: Double = 0.5, lengthScale: Double = 1.0): RectifiedContour {
|
||||||
return RectifiedContour(this.contour, distanceTolerance = distanceTolerance)
|
return RectifiedContour(this.contour, distanceTolerance, lengthScale)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user