Add intersections for path ops
authorcaryclark@google.com <caryclark@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 8 Apr 2013 11:50:00 +0000 (11:50 +0000)
committercaryclark@google.com <caryclark@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 8 Apr 2013 11:50:00 +0000 (11:50 +0000)
commit9166dcb3a0e8784bea83d76ae01aa338c049ae05
treea5c450613d4fa7d2153162b5ac9d4670b1b4f0bc
parent07393cab57ce74a4aae89a31fae9aaa9780fc19d
Add intersections for path ops

This CL depends on
https://codereview.chromium.org/12827020/
"Add base types for path ops"

The intersection of a line, quadratic, or cubic
with another curve (or with itself) is found by
solving the implicit equation for the curve pair.

The curves are first reduced to find the simplest
form that will describe the original, and to detect
degenerate or special-case data like horizontal and
vertical lines.

For cubic self-intersection, and for a pair of cubics,
the intersection is found by recursively
approximating the cubic with a series of quadratics.

The implicit solutions depend on the root finding
contained in the DCubic and DQuad structs, and
the quartic root finder included here.
Review URL: https://codereview.chromium.org/12880016

git-svn-id: http://skia.googlecode.com/svn/trunk@8552 2bbb7eff-a529-9590-31e7-b0007b416f81
13 files changed:
tests/PathOpsCubicIntersectionTest.cpp [new file with mode: 0644]
tests/PathOpsCubicIntersectionTestData.cpp [new file with mode: 0644]
tests/PathOpsCubicIntersectionTestData.h [new file with mode: 0644]
tests/PathOpsCubicLineIntersectionTest.cpp [new file with mode: 0644]
tests/PathOpsCubicReduceOrderTest.cpp [new file with mode: 0644]
tests/PathOpsCubicToQuadsTest.cpp [new file with mode: 0644]
tests/PathOpsLineIntersectionTest.cpp [new file with mode: 0644]
tests/PathOpsLineParametetersTest.cpp [new file with mode: 0644]
tests/PathOpsQuadIntersectionTest.cpp [new file with mode: 0644]
tests/PathOpsQuadIntersectionTestData.cpp [new file with mode: 0644]
tests/PathOpsQuadIntersectionTestData.h [new file with mode: 0644]
tests/PathOpsQuadLineIntersectionTest.cpp [new file with mode: 0644]
tests/PathOpsQuadParameterizationTest.cpp [new file with mode: 0644]