Conversation
| /// A parametrized curve (or a section of one) that can have its signed area measured. | ||
| pub trait ParamCurveArea { | ||
| /// Compute the signed area under the curve. | ||
| /// Compute the signed (counterclockwise) area between the curve and the origin. | ||
| /// Equivalently (using Green's theorem), | ||
| /// this is integral of the form `(x*dy - y*dx)/2` along the curve. | ||
| /// | ||
| /// For closed curves, this is the curve's area. | ||
| /// For open curves, this is the the area of the resulting shape that would be created if | ||
| /// the curve was closed with two line segments between the endpoints and the origin. | ||
| /// This allows the area of a piecewise curve to be computed by adding the areas of its segments, | ||
| /// generalizing the "shoelace formula." | ||
| /// | ||
| /// For an open curve with endpoints `(x0, y0)` and `(x1, y1)`, this value | ||
| /// is also equivalent to `-intgral(y*dx) - (x0*y0 + x1*y1)/2`. | ||
| /// | ||
| /// For a closed path, the signed area of the path is the sum of signed | ||
| /// areas of the segments. This is a variant of the "shoelace formula." | ||
| /// See: | ||
| /// <https://github.com/Pomax/bezierinfo/issues/44> and | ||
| /// <http://ich.deanmcnamee.com/graphics/2016/03/30/CurveArea.html> | ||
| /// | ||
| /// This can be computed exactly for Béziers thanks to Green's theorem, | ||
| /// and also for simple curves such as circular arcs. For more exotic | ||
| /// curves, it's probably best to subdivide to cubics. We leave that | ||
| /// to the caller, which is why we don't give an accuracy param here. | ||
| /// This can be computed exactly for Béziers, | ||
| /// and also for simple curves such as circular arcs. | ||
| /// For more exotic curves, it's probably best to subdivide to cubics. | ||
| /// We leave that to the caller, which is why we don't give an accuracy param here. | ||
| fn signed_area(&self) -> f64; | ||
| } |
There was a problem hiding this comment.
Updating the documentation as the current implementations were measuring this value instead of the area under the curve (integral of y*dx).
raphlinus
left a comment
There was a problem hiding this comment.
Overall this looks good. Any special reason why this is still marked as draft?
src/param_curve.rs
Outdated
| /// A parametrized curve (or a section of one) that can have its signed area measured. | ||
| pub trait ParamCurveArea { | ||
| /// Compute the signed area under the curve. | ||
| /// Compute the signed (counterclockwise) area between the curve and the origin. |
There was a problem hiding this comment.
I like that we're being specific about the area, but the convention is not to say things like "counterclockwise" without also specifying whether coordinates y-up or y-down.
There was a problem hiding this comment.
changed to "counterclockwise from +x to +y"
ea4b5fa to
23f40d9
Compare
Because this is a breaking change, I want to also get |
|
Note that clippy is currently failing due to the state of |
This is fixed now on |
|
A gentle ping, we're planning an 0.10 release which will be a semver bump, and it would be great to get this in. But there will be other chances if not. |
Allows the lesser-used
Shapemethods to be implemented in terms ofpath_elementsand provides default implementations.Resolves #263