Commit graph

214 commits

Author SHA1 Message Date
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
sheaf 1368825103 improve outline computation using divMod' 2024-01-08 11:31:18 +01:00
sheaf f10fbd9810 remove traces & minor cleanups 2024-01-06 18:18:14 +01:00
sheaf 326487942e fix orientation computation 2023-08-30 17:40:47 +02:00
sheaf 92efc4127c add teardrop shaped brush 2023-07-15 16:40:59 +02:00
sheaf 7eb16b4782 tiny build fixes 2023-06-15 00:39:03 +02:00
sheaf 96aa38b3c3 improve rotations in interval arithmetic
Computing a rotation in interval arithmetic can lose tightness.
Instead of computing

   a cos phi + b sin phi

which doesn't account for the difference in phase in the two sinusoids,
it is better to use

  sqrt (a² + b²) * cos ( phi - atan2(a,b) )

which correctly estimates the maximum amplitude of the sum to be
sqrt(a²+b²) instead of abs(a) + abs(b).

This seems to worsen the performance of the interval Newton method
at the moment, possibly due to the complexity of the new formula,
which involves computing atan(b/a). Further investigation is needed.
2023-05-14 21:38:25 +02:00
sheaf 50d99e1e4b improve intervallic Bézier evaluation
Now we evaluate Bézier curves using an AABB computation. This results
in tighter intervals, which means that the cusp-finding algorithm
is better behaved.
2023-04-25 23:07:18 +02:00
sheaf 7db3cbef33 more work into observability 2023-03-13 22:09:15 +01:00
sheaf 52420a1169 experiment: FMA backend for interval arithmetic
also includes the start of a way to observe which equations
are being solved, which should help with improving the performance of
the interval Newton method
2023-03-12 19:15:58 +01:00
sheaf cd6b7368f8 Update cabal.project for GHC 9.6 2023-02-09 17:53:25 +01:00
sheaf 4cd11fa02f add export to SVG functionality 2023-02-03 14:16:57 +01:00
sheaf 8ac22b4738 some optimisations 2023-01-29 04:03:36 +01:00
sheaf 4174d9b5b6 rejigging 2023-01-28 01:26:47 +01:00
sheaf 1ae84fec97 precondition before taking Gauss-Seidel step 2023-01-23 13:58:52 +01:00
sheaf 78c03b99e1 change fitpoint render size 2023-01-23 02:01:56 +01:00
sheaf 86874882e4 fix bug in partitions function 2023-01-23 02:01:03 +01:00
sheaf dd503df126 draw cusps in debug mode 2023-01-23 00:37:56 +01:00
sheaf d2a485f71e Interval Newton method for cusp isolation 2023-01-22 18:00:58 +01:00
sheaf eb68c27941 add separate EnvelopeEquation module (forgot to add earlier) 2023-01-22 18:00:47 +01:00
sheaf bdcac18ab9 add chain rule R^n -> R -> R 2023-01-22 04:51:23 +01:00
sheaf 236055b4ca do the interval brush stroking at degree 3 2023-01-21 15:24:08 +01:00
sheaf 6945aac704 improve show instances 2023-01-20 17:42:17 +01:00
sheaf 25d738b252 more WIP with TH now 2023-01-20 16:34:04 +01:00
sheaf c7cd6c2a1c WIP on monomial bases 2023-01-16 02:31:31 +01:00
sheaf ba07fce595 don't use avx512 in rounded-hw 2023-01-14 03:22:04 +01:00
sheaf 684550a795 implement intervallic brushes 2023-01-13 23:10:06 +01:00
sheaf 09c1bdd948 continue interval arithmetic integration 2023-01-13 15:23:33 +01:00
sheaf a4e9c1cf32 preparation for interval arithmetic 2023-01-13 06:32:34 +01:00
sheaf 33a3cbfaa1 find solutions on nearby curves 2023-01-11 20:05:56 +01:00
sheaf 094801ca67 Merge branch 'envelope' into 'master'
Compute brush strokes using the envelope equation

See merge request sheaf/metabrush!4
2023-01-11 14:27:45 +00:00
sheaf 8fc5e6c9b8 compute brush strokes using the envelope equation 2023-01-11 15:26:12 +01:00
sheaf 43098dec01 Newton-Raphson implementation 2023-01-11 15:25:52 +01:00
sheaf 671dae5474 use R2 instead of Point2D & Vector2D 2023-01-09 04:27:08 +01:00
sheaf 22820b328d more cabal file cleanups 2023-01-09 02:54:42 +01:00