Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: bounding boxes and points for rotated rects #1600

Merged
merged 2 commits into from Aug 4, 2023
Merged

Conversation

liangyiliang
Copy link
Contributor

@liangyiliang liangyiliang commented Aug 4, 2023

Description

Resolves #1595.

The way we handle rotated rectlike shapes has a few problems.

  • For Rectangle shape, the bboxFromRect function computes the bounding box. But it ignores the rotation field. There already exists a function bboxFromRotatedRect (which is used to handle other rect-like shapes such as Text and Image) which we can use.
  • But bboxFromRotatedRect is also implemented incorrectly since it uses the wrong anchor for rotation. Rotation of rectlike shapes is rendered with respect to the center of the shape, but bboxFromRotatedRect uses the top-left corner as the anchor which is inconsistent.
  • Function rectPts uses the same internal algorithm as bboxFromRotatedRect, which has the same error.

See example at code:

image

Implementation strategy and design decisions

I changed three things.

  • rectPts now runs the correct algorithm that bases its rotation on the center of the shape.
  • bboxFromRotatedRect now runs rectPts and constructs a bounding box from these points.
  • bboxFromRect now calls bboxFromRotatedRect.

Examples with steps to reproduce them

https://bboxrot.penrose-72l.pages.dev/try/?gist=d24def0664273563a9d5360289b6b6d7

The example above now behaves correctly.

Checklist

  • I have commented my code, particularly in hard-to-understand areas
  • I have reviewed any generated registry diagram changes

@github-actions
Copy link

github-actions bot commented Aug 4, 2023

± Registry diff

M	alloy-models/generic.svg
M	alloy-models/message-passing.svg
M	animation/center-shrink-circle.svg
M	atoms-and-bonds/wet-floor.svg
M	box-arrow-diagram/computer-architecture.svg
M	curve-examples/catmull-rom/catmull-rom.svg
M	curve-examples/cubic-bezier.svg
M	fancy-text/fancy-text.svg
M	geometric-queries/closest-point/test.svg
M	geometric-queries/closest-silhouette-point/test.svg
M	geometric-queries/test.svg
M	geometry-domain/siggraph-teaser.svg
M	geometry-domain/textbook_problems/c01p01.svg
M	geometry-domain/textbook_problems/c03p01.svg
M	geometry-domain/textbook_problems/c05p01.svg
M	geometry-domain/textbook_problems/c05p13.svg
M	geometry-domain/textbook_problems/c11p12.svg
M	geometry-domain/textbook_problems/ex.svg
M	graph-domain/other-examples/nyc-subway.svg
M	graph-domain/textbook/sec1/fig3.svg
M	graph-domain/textbook/sec1/fig8a.svg
M	graph-domain/textbook/sec1/fig8b.svg
M	graph-domain/textbook/sec2/fig13.svg
M	group-theory/quaternion-multiplication-table.svg
M	hypergraph/hypergraph.svg
M	lagrange-bases/lagrange-bases.svg
M	linear-algebra-domain/two-vectors-perp.svg
M	matrix-ops/tests/matrix-vector-right-multiplication.svg
M	matrix-ops/tests/scalar-vector-left-multiplication.svg
M	matrix-ops/tests/scalar-vector-right-multiplication.svg
M	matrix-ops/tests/vector-vector-multiplication-elementwise.svg
M	mobius/mobius.svg
M	persistent-homology/persistent-homology.svg
M	ray-tracing/bidirectional.svg
M	set-theory-domain/continuousmap.svg
M	set-theory-domain/tree-venn-3d.svg
M	set-theory-domain/tree-venn.svg
M	structural-formula/reactions/methane-combustion.svg
M	triangle-mesh-2d/diagrams/halfedge-mesh.svg
M	triangle-mesh-3d/two-triangles.svg
M	walk-on-spheres/SignedAngleOutside.svg
M	walk-on-spheres/laplace-estimator.svg
M	walk-on-spheres/nested-estimator.svg
M	walk-on-spheres/poisson-estimator.svg
M	walk-on-spheres/walk-on-stars.svg
M	word-cloud/example.svg

📊 Performance

Key

Note that each bar component rounds up to the nearest 100ms, so each full bar is an overestimate by up to 400ms.

     0s   1s   2s   3s   4s   5s   6s
     |    |    |    |    |    |    |
name ▝▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▞▀▀▀▀▀▀▀▀▀▘
      compiling optimizing rendering

If a row has only one bar instead of four, that means it's not a trio and the bar just shows the total time spent for that example, again rounded up to the nearest 100ms.

Data

                                                          0s   1s   2s   3s   4s   5s   6s   7s   8s
                                                          |    |    |    |    |    |    |    |    |
set-theory-domain/tree-venn                               ▝▀▚▘
set-theory-domain/tree-tree                               ▝▚▘
group-theory/quaternion-multiplication-table              ▝▀▀▀▀▚▀▀
walk-on-spheres/SignedAngleOutside                        ▝▀▀▀▞▘
spectral-graphs/examples/hypercube                        ▝▀▀▞
group-theory/quaternion-cayley-graph                      ▝▀▞▘
set-theory-domain/tree-venn-3d                            ▝▀▞▘
atoms-and-bonds/one-water-molecule                        ▝▚▘
structural-formula/molecules/caffeine                     ▝▀▀▀▄▞▀
walk-on-spheres/walk-on-stars                             ▝▀▀▀▀▞▀▀▘
set-theory-domain/continuousmap                           ▝▚▘
mobius/mobius                                             ▝▚▘
linear-algebra-domain/two-vectors-perp                    ▝▚▘
tutorials/tutorial1                                       ▝▞
tutorials/tutorial2                                       ▝▞
tutorials/tutorial3                                       ▝▚▘
molecules/nitricacid-lewis                                ▝▀▀▞
exterior-algebra/vector-wedge                             ▝▚▘
shape-spec/all-shapes                                     ▝▚▀▘
shape-spec/arrowheads                                     ▝▞
graph-domain/textbook/sec1/fig1                           ▝▀▀▄▞
graph-domain/textbook/sec1/fig2                           ▝▀▀▀▀▄▄▘
graph-domain/textbook/sec1/fig3                           ▝▀▀▀▄▄▞
graph-domain/textbook/sec1/fig4                           ▝▀▀▀▄▄▘
spectral-graphs/examples/hexagonal-lattice                ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▚▄▀▀
graph-domain/textbook/sec1/fig5                           ▝▀▀▀▀▀▄▄▄▞
graph-domain/textbook/sec1/fig6                           ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▄▄▞
graph-domain/textbook/sec1/fig7                           ▝▀▚▘
graph-domain/textbook/sec1/fig8a                          ▝▀▀▀▀▄▄▞
graph-domain/textbook/sec1/fig8b                          ▝▀▀▀▚▄▄▘
graph-domain/textbook/sec1/fig9                           ▝▀▀▚▞
graph-domain/textbook/sec1/fig10                          ▝▀▀▚▀
graph-domain/textbook/sec1/fig11                          ▝▀▀▀▀▀▄▀
graph-domain/textbook/sec1/fig12                          ▝▀▀▀▀▄▄▀
graph-domain/textbook/sec1/fig13                          ▝▀▀▀▄▄▘
graph-domain/textbook/sec2/fig3                           ▝▀▀▀▀▀▀▀▚▄▄▄▄▘
graph-domain/textbook/sec2/fig4                           ▝▀▀▀▀▀▀▄▄▄▞
graph-domain/textbook/sec2/fig5                           ▝▀▀▀▀▀▀▀▀▄▄▄▄▞
graph-domain/textbook/sec2/fig6                           ▝▀▀▀▀▀▀▀▀▄▄▄▄▄▘
graph-domain/textbook/sec2/fig9                           ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▄▘
graph-domain/textbook/sec2/fig10a                         ▝▀▀▚▄▞
graph-domain/textbook/sec2/fig10b                         ▝▀▀▄▀
graph-domain/textbook/sec2/fig11a                         ▝▀▚▘
graph-domain/textbook/sec2/fig11b                         ▝▀▞
graph-domain/textbook/sec2/fig11c                         ▝▀▚▀
graph-domain/textbook/sec2/fig12                          ▝▀▞
graph-domain/textbook/sec2/fig13                          ▝▀▀▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▄▄▄▄▘
graph-domain/textbook/sec2/fig14                          ▝▀▀▀▀▄▄▘
graph-domain/textbook/sec2/fig16b                         ▝▀▚▀
geometry-domain/textbook_problems/c05p13                  ▝▀▚▘
geometry-domain/textbook_problems/c01p01                  ▝▀▚▘
geometry-domain/textbook_problems/c03p01                  ▝▀▚▘
geometry-domain/textbook_problems/c05p01                  ▝▀▚▘
geometry-domain/textbook_problems/ex                      ▝▀▀▚▞
triangle-mesh-3d/two-triangles                            ▝▚▘
random-sampling/test                                      ▝▀▀▚▘
geometry-domain/textbook_problems/c11p12                  ▝▀▀▞
curve-examples/catmull-rom/catmull-rom                    ▝▚▘
word-cloud/example                                        ▝▀▀▄▞
geometry-domain/siggraph-teaser                           ▝▀▀▞
minkowski-tests/maze/non-convex                           ▝▀▚▘
lagrange-bases/lagrange-bases                             ▝▚▘
hypergraph/hypergraph                                     ▝▀▀▀▚▄▄▄▄▄▄▄▄▄▄▄▄▄▘
persistent-homology/persistent-homology                   ▝▀▀▄▄▄▞▘
walk-on-spheres/laplace-estimator                         ▝▀▀▞
walk-on-spheres/poisson-estimator                         ▝▀▀▚▘
walk-on-spheres/nested-estimator                          ▝▀▀▚▀
walk-on-spheres/offcenter-estimator                       ▝▀▚▘
shape-distance/points-around-star                         ▝▀▀▚▀
shape-distance/points-around-polyline                     ▝▀▚▘
shape-distance/points-around-line                         ▝▀▚▘
shape-distance/lines-around-rect                          ▝▀▞
fake-3d-linear-algebra/projection                         ▝▞
animation/center-shrink-circle                            ▝▞
graph-domain/other-examples/hamiltonian-cycle             ▝▀▀▀▄▞▘
structural-formula/reactions/methane-combustion           ▝▀▀▀▄▄▄▄▄▄▘
molecules/glutamine                                       ▝▀▞
matrix-ops/tests/matrix-matrix-addition                   ▝▚▘
matrix-ops/tests/matrix-matrix-division-elementwise       ▝▀▞
matrix-ops/tests/matrix-matrix-multiplication-elementwise ▝▚▘
matrix-ops/tests/matrix-matrix-multiplication             ▝▚▘
matrix-ops/tests/matrix-matrix-subtraction                ▝▚▘
matrix-ops/tests/matrix-transpose                         ▝▚▘
matrix-ops/tests/matrix-vector-left-multiplication        ▝▚▘
matrix-ops/tests/matrix-vector-right-multiplication       ▝▚▘
matrix-ops/tests/scalar-vector-division                   ▝▚▘
matrix-ops/tests/scalar-vector-left-multiplication        ▝▚▘
matrix-ops/tests/scalar-vector-right-multiplication       ▝▚▘
matrix-ops/tests/vector-vector-addition                   ▝▚▘
matrix-ops/tests/vector-vector-division-elementwise       ▝▚▘
matrix-ops/tests/vector-vector-multiplication-elementwise ▝▚▘
matrix-ops/tests/vector-vector-outerproduct               ▝▚▘
matrix-ops/tests/vector-vector-subtraction                ▝▚▘
logic-circuit-domain/half-adder                           ▝▚▘
curve-examples/cubic-bezier                               ▝▀▄▄▞
triangle-mesh-2d/diagrams/cotan-formula                   ▝▀▀▄▘
triangle-mesh-2d/diagrams/concyclic-pair                  ▝▀▚▘
triangle-mesh-2d/diagrams/halfedge-mesh                   ▝▀▞
triangle-mesh-2d/diagrams/relative-orientation            ▝▀▞
triangle-mesh-2d/diagrams/triangle-centers                ▝▀▞
triangle-mesh-2d/diagrams/angle-equivalence               ▝▀▚▄▞
timeline/penrose                                          ▝▀▀▀▚▞
graph-domain/textbook/sec5/ex32                           ▝▀▀▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▄▞
curve-examples/open-elastic-curve                         ▝▀▚▞
curve-examples/closed-elastic-curve                       ▝▀▚▞
graph-domain/other-examples/arpanet                       ▝▀▀▀▀▀▀▀▀▄▄▄▄▄▄▄▄▘
graph-domain/other-examples/nyc-subway                    ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▞
fancy-text/fancy-text                                     ▝▀▚▄▘
curve-examples/blobs                                      ▝▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▄▄▘
curve-examples/space-curves                               ▝▀▀▀▀▀▄▄▘
geometric-queries/ray-intersect/test-group                ▝▀▀▀▀▀▀▀▀▞▘
ray-tracing/path-trace                                    ▝▀▀▞
ray-tracing/bidirectional                                 ▝▀▚▘
ray-tracing/next-event-estimation                         ▝▀▀▞
geometric-queries/test                                    ▝▀▞
geometric-queries/closest-point/test-group                ▝▀▞
geometric-queries/closest-point/test                      ▝▚▘
geometric-queries/closest-silhouette-point/test           ▝▚▘
geometric-queries/ray-intersect/test                      ▝▀▀▀▀▀▀▀▀▚▀▀▘
box-arrow-diagram/computer-architecture                   ▝▀▀▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▞
stochastic-process/stochastic-process                     ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▚▀▀▀▘
stochastic-process/epsilon-shell/AbsorbingBoundary        ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▚▀▀▀▀▀▀▀▀▀
solid/eigenspace                                          ▐█
solid/triangles                                           ▐█
solid/vectors                                             ▐▌
tsne/tsne                                                 ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▞▀▀▀▀▀
spectral-graphs/examples/4x4-sudoku-graph                 ▝▀▀▀▀▞▘
spectral-graphs/examples/dodecahedral-graph               ▝▀▚▘
atoms-and-bonds/wet-floor                                 ▝▀▄▘
curve-examples/offset                                     ▝▚▞
curve-examples/frenet-frame                               ▝▚▘
curve-examples/osculating-circle                          ▝▞
curve-examples/evolute-of-cardioid                        ▝▀▀▚▘
spectral-graphs/examples/truncated-cube-graph             ▝▀▚▘
spectral-graphs/examples/torus                            ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▚▄▄▀▘
spectral-graphs/examples/periodic-hexagonal-lattice       ▝▀▀▀▀▀▚▄▘
alloy-models/dining-philosophers                          ▝▚▘
alloy-models/message-passing                              ▝▀▀▚▄▄▄▞
alloy-models/ring-leader-election                         ▝▚▘
alloy-models/river-crossing                               ▝▞▀▀▘
alloy-models/workstations                                 ▝▀▀▄▞
alloy-models/generic                                      ▝▀▀▀▀▀▀▄▄▄▄▞

@cloudflare-pages
Copy link

cloudflare-pages bot commented Aug 4, 2023

Deploying with  Cloudflare Pages  Cloudflare Pages

Latest commit: 7e48c61
Status: ✅  Deploy successful!
Preview URL: https://60ad42c0.penrose-72l.pages.dev
Branch Preview URL: https://bboxrot.penrose-72l.pages.dev

View logs

@liangyiliang liangyiliang marked this pull request as ready for review August 4, 2023 17:18
@liangyiliang liangyiliang merged commit ec0fa7b into main Aug 4, 2023
12 checks passed
@liangyiliang liangyiliang deleted the bboxrot branch August 4, 2023 23:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Bounding boxes for rotated rectangles
2 participants