Commit graph

49 commits

Author SHA1 Message Date
sheaf 13cc649319 improve corner initial guess for Newton iteration
This commit improves the initial guess we use for the Newton iteration
to solve the envelope equation when the best tangent we found arises
from a corner: instead of starting at (i = i0, s = 0), i.e. at the start
of the current curve in the spline, we might instead start at
(i = i0 - 1, s = 1).

This commit also improves the debug output to make it clearer which part
of the path goes forwards (little white dot above, inside fit points)
or backwards (little black dot below, inside fit points).
2024-11-17 15:34:55 +01:00
sheaf 197adec8d0 handle brush corners 2024-11-02 10:57:04 +01:00
sheaf 7a82470db9 fixup curve drag code 2024-11-02 10:53:54 +01:00
sheaf fea6667114 hacky fix to cusp computation timeout 2024-10-12 16:48:48 +02:00
sheaf 1a8f4b5f5d improvements to brush params when changing brush 2024-10-12 15:41:52 +02:00
sheaf f7a4b02e90 fix stroke cache issues 2024-09-28 13:07:56 +02:00
sheaf 3886dca483 improvements to draw anchor 2024-09-28 12:10:36 +02:00
sheaf 0eb0724dde Refactors in preparation for stroke hierarchy 2024-09-27 17:21:24 +02:00
sheaf bb9b381cb5 workaround for TH linking bugs 2024-09-06 13:08:40 +02:00
sheaf 9ff25a25aa cleanups 2024-08-29 01:46:50 +02:00
sheaf 2bae92dc5e more SIMD experiments 2024-08-29 00:26:19 +02:00
sheaf ed8720555f improve D to use Nat for domain 2024-08-05 17:49:04 +02:00
sheaf 5f98165276 WIP: SIMD experiments 2024-08-01 21:36:44 +02:00
sheaf e64ce375d2 housekeeping 2024-07-29 13:39:13 +02:00
sheaf 77a36e1f0b add more info to cusps benchmark output 2024-05-25 12:41:10 +02:00
sheaf af66b3b5ac update bounds for GHC 9.10 2024-05-23 11:17:36 +02:00
sheaf 91ac61e3cd WIP: add Walter's LP approach to interval Newton 2024-05-23 11:04:17 +02:00
sheaf 2a21980ffc Fix issues in withTangent & strictlyParallel function 2024-04-29 19:35:53 +02:00
sheaf c89fba7fd2 Improve specialisation + add degree computation 2024-04-25 21:53:27 +02:00
sheaf 6450859e3c Bench with & without box(1)-consistency algorithm 2024-04-24 02:04:13 +02:00
sheaf 17df43c5d7 Commentary in tearDropBrushFn 2024-04-24 01:47:01 +02:00
sheaf 32ce7c38bb Add some commentary to Gauss-Seidel function 2024-04-24 01:30:24 +02:00
sheaf a59f1695fb Sprinkle in a bit of unicode 2024-04-24 01:03:46 +02:00
sheaf edba0416aa Add complete interval-union Gauss–Seidel step method 2024-04-24 00:13:06 +02:00
sheaf ac9deb968a Clean up benchmarking component 2024-04-22 22:11:07 +02:00
sheaf 0c54de8b1c Update Eigen to expose unsafeCoeff 2024-04-22 20:12:31 +02:00
sheaf d797abc5e4 Modularise root isolation algorithms
Different root isolation algorithms now live in separate modules,
and are all instances of the RootIsolationAlgorithm typeclass.

This separates the algorithmic code from the top-level driver code
in Math.Root.Isolation.
2024-04-22 20:06:03 +02:00
sheaf b1df0d04e6 Always run Gauss-Seidel at tiny sizes to rule out fake solutions 2024-04-22 01:52:29 +02:00
sheaf 0e59d85143 Use 'n choose k' to choose Gauss-Seidel dimensions 2024-04-21 21:15:07 +02:00
sheaf 0e6b9a822b Documentation in root isolation module 2024-04-21 20:35:35 +02:00
sheaf 8009983b37 Slight refactor of bisection dimension choosing logic 2024-04-21 20:10:37 +02:00
sheaf ced714987e Implement adaptive shaving algorithm 2024-04-21 18:09:21 +02:00
sheaf 01fdd9a126 Improve robustness of quadratic equation solver
Based on ideas from the paper
  "The Ins and Outs of Solving Quadratic Equations with Floating-Point Arithmetic"
    (Frédéric Goualard, 2023)

Could still be improved further, but I think this is acceptable for now.
2024-04-21 14:19:37 +02:00
sheaf 1338d7ddbe Improve intervallic rotation computations
This commit bakes in a certain kind of representation for brush strokes:

  c(t,s) = p(t) + R(theta(t)) b(t,s)

This representation allows us to cancel out some rotation terms when
computing the envelope equation, improving the efficiency of the
cusp-finding methods.
2024-04-20 18:28:41 +02:00
sheaf 2b167f594a Make it easier to switch between 2 and 3-dim
This commit makes it easier to switch between the 2-dim and 3-dim
formulations of the cusp-finding problem. This is still work in progress,
trying to improve the performance of the cusp-finding algorithms.
2024-04-18 21:33:55 +02:00
sheaf 0160081e80 Further modularisation of root isolation code
The code is now generic over the dimension. There is a slight performance
loss that I need to investigate; perhaps some things are not getting
specialised? Maybe it is better to be more explicit about staging and
splice in the functions with fixed dimensions.
2024-04-18 20:14:19 +02:00
sheaf 131753da82 Split off root-isolation algorithms into Math.Root.Isolation 2024-04-17 20:41:21 +02:00
sheaf bd468fcf82 start modularising cusp finding code 2024-04-05 17:48:53 +02:00
sheaf 55470d1f0e make cusp-finding algorithm choice more configurable 2024-04-03 18:46:08 +02:00
sheaf a183475985 Cusp finding: implement bound consistency improvement 2024-03-14 21:50:34 +01:00
sheaf 61671dc280 Implement box(1) consistency check for cusp finding 2024-03-13 18:00:37 +01:00
sheaf 60ebf7886f Split up succFP etc into separate module 2024-03-11 14:09:54 +01:00
sheaf 34c129d72a Add tests and fix MonomialBasis D3A3 instance 2024-03-08 15:35:39 +01:00
sheaf cebfeb0b7a Fix some more issues with interval recip 2024-03-06 16:07:21 +01:00
sheaf 2289468a84 Fixes and restructuring 2024-02-28 17:20:34 +01:00
sheaf 26cfdada8f Fix extendedRecip (negative infinity) 2024-02-24 19:37:34 +01:00
sheaf d1b3765335 Split out benchmark for cusp finding 2024-02-23 17:03:28 +01:00
sheaf b70f7ba133 Add mechanisms to log envelope equation data 2024-02-19 16:46:09 +01:00
sheaf 6b658acedd Restructure project & update bounds 2024-02-17 13:58:40 +01:00