package bezierpatch import org.openrndr.application import org.openrndr.color.ColorRGBa import org.openrndr.extra.shapes.bezierpatches.bezierPatch import org.openrndr.shape.Circle /** * Shows how to get positions and gradient values of those positions * from a [bezierPatch] * * You can think of bezierPatch.position() as requesting points * in a wavy flag (the bezier patch) using normalized uv coordinates. */ fun main() = application { configure { width = 800 height = 800 } program { val bp = bezierPatch( Circle(drawer.bounds.center, 350.0).contour //Rectangle.fromCenter(drawer.bounds.center, 550.0).contour ) extend { drawer.clear(ColorRGBa.PINK) drawer.stroke = ColorRGBa.BLACK for (j in 1 until 50 step 2) { for (i in 1 until 50 step 2) { val u = i / 50.0 val v = j / 50.0 val pos = bp.position(u, v) val grad = bp.gradient(u, v).normalized * 10.0 val perpendicular = grad.perpendicular() drawer.lineSegment(pos - grad, pos + grad) drawer.lineSegment(pos - perpendicular, pos + perpendicular) //drawer.circle(pos + grad, 3.0) } } } } }