phetsims / kite

A library for creating, manipulating and displaying 2D shapes in JavaScript.
MIT License
12 stars 6 forks source link

CoilSegment getLocalShape computes almost 5,000,000 intersections #105

Open samreid opened 3 months ago

samreid commented 3 months ago

During phetsims/faradays-electromagnetic-lab#103, @matthew-blackman and I were investigating the pointer areas for the CoilSegmentNode in phetsims/faradays-electromagnetic-lab#111 and we observed that the pointer areas did not match the stroked shape. So we tried to enable the "scenery helper" ctrl+shift+H to see what was being hit tested. In doing this and mousing over the coil, we observed that the sim locked up. When pressing "pause" in the dev tools, we saw that the intersection test was detecting nearly 5,000,000 intersections.

image

Here is the patch we used for testing that simplified the views to just focus on the CoilSegmentNode:

```diff Subject: [PATCH] Rename angleStabilizerProperty => angleStabilityProperty and related names, see https://github.com/phetsims/projectile-data-lab/issues/252 --- Index: js/common/view/PickupCoilNode.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/js/common/view/PickupCoilNode.ts b/js/common/view/PickupCoilNode.ts --- a/js/common/view/PickupCoilNode.ts (revision 038b14a29f5e7916bb29f76d43ca9f2b98529662) +++ b/js/common/view/PickupCoilNode.ts (date 1710944494414) @@ -66,7 +66,7 @@ } ); // This Node's children are the foreground elements only. - options.children = [ coilNode, samplePointsNode, lightBulbNode, voltmeterNode ]; + options.children = [ coilNode ]; super( pickupCoil, options ); Index: js/common/view/ElectronsNode.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/js/common/view/ElectronsNode.ts b/js/common/view/ElectronsNode.ts --- a/js/common/view/ElectronsNode.ts (revision 038b14a29f5e7916bb29f76d43ca9f2b98529662) +++ b/js/common/view/ElectronsNode.ts (date 1710943813492) @@ -49,7 +49,8 @@ visibleProperty: coil.electronsVisibleProperty, sprites: [ sprite ], // the set of Sprites used to render this Node, must be set at instantiation spriteInstances: spriteInstances, // the set of SpriteInstances, one per compass needle in the grid - hitTestSprites: false + hitTestSprites: false, + pickable: false } ); this.sprite = sprite; Index: js/transformer/view/TransformerNode.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/js/transformer/view/TransformerNode.ts b/js/transformer/view/TransformerNode.ts --- a/js/transformer/view/TransformerNode.ts (revision 038b14a29f5e7916bb29f76d43ca9f2b98529662) +++ b/js/transformer/view/TransformerNode.ts (date 1710944429631) @@ -33,7 +33,7 @@ } ); super( { - children: [ electromagnetNode, pickupCoilNode ], + children: [ pickupCoilNode ], tandem: tandem, phetioFeatured: true, // ... so that featured linked element will appear in 'Featured' tree. phetioVisiblePropertyInstrumented: false Index: js/transformer/view/TransformerScreenView.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/js/transformer/view/TransformerScreenView.ts b/js/transformer/view/TransformerScreenView.ts --- a/js/transformer/view/TransformerScreenView.ts (revision 038b14a29f5e7916bb29f76d43ca9f2b98529662) +++ b/js/transformer/view/TransformerScreenView.ts (date 1710944429587) @@ -75,18 +75,18 @@ // Rendering order, from back to front. const screenViewRootNode = new Node( { children: [ - transformerNode.pickupCoilNode.backgroundNode, - transformerNode.electromagnetNode.backgroundNode, - this.fieldNode, - pickupCoilAxisNode, - this.compassNode, // behind transformerNode, see https://github.com/phetsims/faradays-electromagnetic-lab/issues/10#issuecomment-1911160748 + // transformerNode.pickupCoilNode.backgroundNode, + // transformerNode.electromagnetNode.backgroundNode, + // this.fieldNode, + // pickupCoilAxisNode, + // this.compassNode, // behind transformerNode, see https://github.com/phetsims/faradays-electromagnetic-lab/issues/10#issuecomment-1911160748 transformerNode, - panels, - this.fieldMeterNode, - timeControlNode, - this.resetAllButton, - developerAccordionBox, - pickupCoilDebuggerPanel + // panels, + // this.fieldMeterNode, + // timeControlNode, + // this.resetAllButton, + // developerAccordionBox, + // pickupCoilDebuggerPanel ] } ); this.addChild( screenViewRootNode ); ```

We don't know whether this problem is isolated to the scenery helper, or if it would trigger in calling getLocalShape on the CoilSegmentNode directly. But ideally the scenery helper could be use to help with issues like this (it is working properly in other simulations such as Kepler's Laws).

pixelzoom commented 3 months ago

I'm guessing that it's significantly more expensive to do hit testing for the direction that you're going for phetsims/faradays-electromagnetic-lab#111. @jonathanolson can you comment on the performance implications, and whether this is specific to scenery helper?

In any case... I don't recommend going down this path for phetsims/faradays-electromagnetic-lab#111. It's unnecessary, see https://github.com/phetsims/faradays-electromagnetic-lab/issues/111#issuecomment-2010978731. And if you'd like to pursue whether this is a problem with scenery helper, let's transfer this issue to scenery.

jonathanolson commented 3 months ago

image

Scenery helper is showing an interesting "highlight"

jonathanolson commented 3 months ago

With the patch applied and second screen open:

phet.joist.display.rootNode.children[ 0 ].children[ 2 ].children[ 1 ].children[ 0 ].children[0].children[ 3 ].getSelfShape().toString()

is showing what seems to be the buggy path:

image

pixelzoom commented 3 months ago

The screenshot in https://github.com/phetsims/kite/issues/105 corresponds to the unexpected hit testing behavior shown in https://github.com/phetsims/faradays-electromagnetic-lab/issues/111#issuecomment-2012481604:

screenshot_3117
jonathanolson commented 3 months ago

The Helper is unioning a bunch of shapes together. It seems to include a case that is causing some grief in kite. It's also a bit complicated, because serializing the shapes and deserializing seems to be... causing a different error (yay floats).

jonathanolson commented 3 months ago

image

image

Trying to find intersections between two circular arcs that are... very similar (but didn't get filtered out by overlap detection, because they do not overlap in angle ranges)

jonathanolson commented 3 months ago

Broken computation:

```js phet.kite.Shape.union( [ new phet.kite.Shape( 'M -8.26908679864905238333 98.74060470818979240448 Q -7.64464161531432750962 99.30935466199537131615 -7.00243961956464477936 99.81844045123551723009 A 8.00000000000000000000 8.00000000000000000000 0 1 1 -16.99756038043539163596 112.31234140232403717619 Q -18.01263011791660773042 111.49560980497949458368 -18.99366692614935203665 110.61424699220800960120 Q -19.96647953036260147996 109.73103491216652116691 -20.90515597776536083074 108.78443380937933682162 Q -21.83563682272846406818 107.83716663938923829846 -22.73212873049525128977 106.82762338877824959127 Q -23.62067672852075261858 105.81844829958833997807 -24.47557743302120769613 104.74794686707454616226 Q -25.32295140299107671922 103.67867552327962243908 -26.13715686248687575244 102.54885081609010910597 Q -26.94436285425170041208 101.42094096228946398242 -27.71896397984830073824 100.23307657217287669482 Q -28.48715471154191902770 99.04764342982173275232 -29.22334536369994140159 97.80269414544923733956 Q -29.95373765322157666446 96.56054159182671980943 -30.65274189284679806633 95.25917097447093340179 Q -31.34655371409177604392 93.96083348316355454699 -32.00957234087113079113 92.60345840996271249423 Q -32.66797829629204130697 91.24924671495705297275 -33.29615255640396753734 89.83608295566905610485 Q -33.92025503159801047559 88.42612858852540114185 -34.51464439176406528986 86.95723358162247507153 Q -35.10545712114584659957 85.49152936669305802297 -35.66702782617165468082 83.96684008536361432107 Q -36.22546869049076434521 82.44527517017134243815 -36.75509010928117703543 80.86464022508403104439 Q -37.28198040587967199144 79.28702925315000982209 -37.78042667132420717735 77.65023520108915988658 Q -38.27649463786696060197 76.01634187180840740439 -38.74444963440335243376 74.32313417663799270940 Q -39.21033654151039371527 72.63268977918515645342 -39.64840079993386723345 70.88278910269751520445 Q -40.08466839538530734899 69.13550675232390574365 -40.49336687796628098113 67.32862132322549086894 Q -40.90050534292048922680 65.52420664469509858918 -41.28029543429131820176 63.66004142982735203304 Q -41.65873130092757037346 61.79820037939250454428 -42.01001056870106253882 59.87646370792094074886 Q -42.36011426026681903068 57.95690813913239480826 -42.68322772777447227099 55.97731633724842481570 Q -43.00532053111312080773 53.99976781992771890373 -43.30056732810068353956 51.96204831805534496425 Q -43.59492770999300859103 49.92624062691417918813 -43.86256704934179140309 47.83013391285810200770 Q -44.12943629404943379768 45.73581451900192718085 -44.36969277500313069140 43.58107523313059772363 Q -44.60927996139205475856 41.42800606051699929822 -44.82234823126626110934 39.21440346411176136598 Q -45.03483459155381751771 37.00236111413506989720 -45.22088341515704712492 34.72967910894798393429 Q -45.40642612936653677025 32.45845470871412175029 -45.56560192320486635253 30.12649154327121081565 Q -45.72433740790641820695 27.79589033532044695107 -45.85676729809519969194 25.40445809999856052741 Q -45.98881404780404125177 23.01429886163005633648 -46.09460850882533833328 20.56322284845352044158 Q -46.20006954545914368282 18.11333720588262963247 -46.27932467306794706019 15.60245518888952531711 Q -46.35828965442163251964 13.09268687389222485251 -46.41108912115983287094 10.52184835057840572858 Q -46.46363615427445381556 7.95205243391256200169 -46.49005289086071712745 5.32111785664280922958 Q -46.51625009096353124960 2.69115998245442122894 -46.51634773169494962985 0.00000000000000000000 A 8.00000000000000000000 8.00000000000000000000 0 1 1 -30.51634773169494962985 0.00000000000000000000 Q -30.51644537242637156282 2.61210956388456905231 -30.49085283086571607214 5.16112585604285101226 Q -30.46547982578850266577 7.70916544511976820075 -30.41444737557619859558 10.19404831480827411383 Q -30.36366735898747393207 12.67788857784880640622 -30.28726311535075055303 15.09850366921353526095 Q -30.21114901796914864462 17.51800505858246026492 -30.10945108794908975369 19.87420744238127667813 Q -30.00808658231651904202 22.22921945557444800556 -29.88118462370803030126 24.52085286358333959811 Q -29.75466580557947793295 26.81121327463884895792 -29.60266284030022632123 29.03810933307315522711 Q -29.45110018415775243739 31.26364343401531442623 -29.27411470672297966189 33.42562092017420383172 Q -29.09763533868195395371 35.58614080137986945829 -28.89580376566176767028 37.68300495780359682385 Q -28.69455410222823132926 39.77830886779877772597 -28.46803361364596085537 41.80985082159329380147 Q -28.24218241962845965531 43.83972266213007884517 -27.99115424770142723787 45.80571901468968576410 Q -27.74089617041554589605 47.76992804704939032945 -27.46556939400974783894 49.67014072233170196569 Q -27.19112903269918746219 51.56844158688280543856 -26.89174493607622906666 53.40261805599324418381 Q -26.59338150362227537471 55.23475124054041884847 -26.27021855356295532147 57.00262527819066349366 Q -25.94823117971138159987 58.76831821315797554917 -25.60161066305910537722 60.46961138916963562906 Q -25.25634437114140240510 62.16858040074839664157 -24.88663671114360909087 63.80300456867216496448 Q -24.51848906877258116310 65.43495798602795332499 -24.12612079760855365862 67.00221910211622855513 Q -23.73554918941656666220 68.56686189209047199711 -23.32101048824467426357 70.06666558110718767693 Q -22.90853987650213241523 71.56370597240632491776 -22.47239249310248254687 72.99576534960279161623 Q -22.03862340860461799252 74.42492400401916086139 -21.58150861359724004274 75.78897035857005448634 Q -21.12712494078179048529 77.14999273996765793981 -20.64977097183156473648 78.44578977126796814900 Q -20.17554684358803740452 79.73846243643110653920 -19.67877499803702079362 80.96582478800195303847 Q -19.18557978327027058185 82.18999634759931893768 -18.67030794186804598667 83.34881316696360897822 Q -18.15910788538370468359 84.50442059418355711387 -17.62634978254487094773 85.59468470569355247335 Q -17.09820435106450275953 86.68178543900830845814 -16.54906237238628108344 87.70362837422423751832 Q -16.00511281208830283163 88.72243818339175902565 -15.44076156002325461714 89.67617067630025928793 Q -14.88220867059462904081 90.62710643845872482416 -14.30386611903810489821 91.51326296264626591892 Q -13.73193396138457877953 92.39698823906833524688 -13.14081692823580027607 93.21637267181402819460 Q -12.55669936281799792255 94.03384225117085293277 -11.95396056621080305149 94.78756981392996294744 Q -11.35874850413419423489 95.54006728797020286947 -10.74539399391915139859 96.22959572534200844984 Q -10.13998339344540866591 96.91875600129270651450 -9.51677198850451233625 97.54589697787200464063 Q -8.90175618600327211993 98.17370402165421694463 -8.26908679864905238333 98.74060470818979240448 Z ' ), new phet.kite.Shape( 'M -30.49085283086571607214 -5.16112585604285101226 Q -30.51644537242637156282 -2.61210956388456905231 -30.51634773169494962985 0.00000000000000000000 A 8.00000000000000000000 8.00000000000000000000 0 1 1 -46.51634773169494962985 0.00000000000000097972 Q -46.51625009096353124960 -2.69115998245442122894 -46.49005289086071712745 -5.32111785664280922958 Q -46.46363615427445381556 -7.95205243391256200169 -46.41108912115983287094 -10.52184835057840572858 Q -46.35828965442163251964 -13.09268687389222485251 -46.27932467306794706019 -15.60245518888952531711 Q -46.20006954545914368282 -18.11333720588262963247 -46.09460850882533833328 -20.56322284845352044158 Q -45.98881404780404125177 -23.01429886163005633648 -45.85676729809519969194 -25.40445809999856052741 Q -45.72433740790641820695 -27.79589033532044695107 -45.56560192320486635253 -30.12649154327121081565 Q -45.40642612936653677025 -32.45845470871412175029 -45.22088341515704712492 -34.72967910894798393429 Q -45.03483459155381751771 -37.00236111413506989720 -44.82234823126626110934 -39.21440346411176136598 Q -44.60927996139205475856 -41.42800606051699929822 -44.36969277500313069140 -43.58107523313059772363 Q -44.12943629404943379768 -45.73581451900192718085 -43.86256704934179140309 -47.83013391285810200770 Q -43.59492770999300859103 -49.92624062691417918813 -43.30056732810068353956 -51.96204831805534496425 Q -43.00532053111312080773 -53.99976781992771890373 -42.68322772777447227099 -55.97731633724842481570 Q -42.36011426026681903068 -57.95690813913239480826 -42.01001056870106253882 -59.87646370792097627600 Q -41.65873130092757037346 -61.79820037939250454428 -41.28029543429131820176 -63.66004142982735203304 Q -40.90050534292048922680 -65.52420664469509858918 -40.49336687796628098113 -67.32862132322550507979 Q -40.08466839538530734899 -69.13550675232390574365 -39.64840079993386723345 -70.88278910269751520445 Q -39.21033654151039371527 -72.63268977918515645342 -38.74444963440335243376 -74.32313417663799270940 Q -38.27649463786696060197 -76.01634187180840740439 -37.78042667132420717735 -77.65023520108915988658 Q -37.28198040587967199144 -79.28702925315000982209 -36.75509010928117703543 -80.86464022508403104439 Q -36.22546869049076434521 -82.44527517017134243815 -35.66702782617165468082 -83.96684008536361432107 Q -35.10545712114584659957 -85.49152936669305802297 -34.51464439176405818444 -86.95723358162248928238 Q -33.92025503159801047559 -88.42612858852540114185 -33.29615255640396753734 -89.83608295566905610485 Q -32.66797829629204130697 -91.24924671495705297275 -32.00957234087113789656 -92.60345840996269828338 Q -31.34655371409177604392 -93.96083348316355454699 -30.65274189284679806633 -95.25917097447093340179 Q -29.95373765322157666446 -96.56054159182671980943 -29.22334536369995561245 -97.80269414544922312871 Q -28.48715471154191902770 -99.04764342982173275232 -27.71896397984831139638 -100.23307657217286248397 Q -26.94436285425170041208 -101.42094096228946398242 -26.13715686248687575244 -102.54885081609010910597 Q -25.32295140299107671922 -103.67867552327962243908 -24.47557743302120769613 -104.74794686707454616226 Q -23.62067672852075261858 -105.81844829958833997807 -22.73212873049526194791 -106.82762338877823538041 Q -21.83563682272846406818 -107.83716663938923829846 -20.90515597776536083074 -108.78443380937933682162 Q -19.96647953036260147996 -109.73103491216652116691 -18.99366692614935203665 -110.61424699220800960120 Q -18.01263011791660773042 -111.49560980497949458368 -16.99756038043535610882 -112.31234140232407980875 A 8.00000000000000000000 8.00000000000000000000 0 1 1 -7.00243961956460658769 -99.81844045123555986265 Q -7.64464161531432750962 -99.30935466199537131615 -8.26908679864905238333 -98.74060470818979240448 Q -8.90175618600327211993 -98.17370402165421694463 -9.51677198850451233625 -97.54589697787200464063 Q -10.13998339344540866591 -96.91875600129270651450 -10.74539399391916205673 -96.22959572534199423899 Q -11.35874850413419423489 -95.54006728797020286947 -11.95396056621080305149 -94.78756981392996294744 Q -12.55669936281799792255 -94.03384225117085293277 -13.14081692823580027607 -93.21637267181402819460 Q -13.73193396138457877953 -92.39698823906833524688 -14.30386611903811555635 -91.51326296264625170807 Q -14.88220867059462904081 -90.62710643845872482416 -15.44076156002326882799 -89.67617067630024507707 Q -16.00511281208830283163 -88.72243818339175902565 -16.54906237238628108344 -87.70362837422423751832 Q -17.09820435106450275953 -86.68178543900830845814 -17.62634978254488160587 -85.59468470569353826249 Q -18.15910788538370468359 -84.50442059418355711387 -18.67030794186804598667 -83.34881316696360897822 Q -19.18557978327027058185 -82.18999634759931893768 -19.67877499803701724090 -80.96582478800196724933 Q -20.17554684358803740452 -79.73846243643110653920 -20.64977097183156473648 -78.44578977126796814900 Q -21.12712494078179048529 -77.14999273996765793981 -21.58150861359724004274 -75.78897035857005448634 Q -22.03862340860461799252 -74.42492400401916086139 -22.47239249310248254687 -72.99576534960279161623 Q -22.90853987650213241523 -71.56370597240632491776 -23.32101048824467426357 -70.06666558110718767693 Q -23.73554918941656666220 -68.56686189209047199711 -24.12612079760855365862 -67.00221910211622855513 Q -24.51848906877258116310 -65.43495798602795332499 -24.88663671114360909087 -63.80300456867217206991 Q -25.25634437114140240510 -62.16858040074839664157 -25.60161066305910537722 -60.46961138916963562906 Q -25.94823117971138159987 -58.76831821315797554917 -26.27021855356295176875 -57.00262527819069902080 Q -26.59338150362227537471 -55.23475124054041884847 -26.89174493607622906666 -53.40261805599324418381 Q -27.19112903269918746219 -51.56844158688280543856 -27.46556939400974783894 -49.67014072233170196569 Q -27.74089617041554589605 -47.76992804704939032945 -27.99115424770142723787 -45.80571901468968576410 Q -28.24218241962845965531 -43.83972266213007884517 -28.46803361364596085537 -41.80985082159329380147 Q -28.69455410222823132926 -39.77830886779877772597 -28.89580376566176767028 -37.68300495780359682385 Q -29.09763533868195395371 -35.58614080137986945829 -29.27411470672297966189 -33.42562092017420383172 Q -29.45110018415775243739 -31.26364343401531442623 -29.60266284030022632123 -29.03810933307315522711 Q -29.75466580557947793295 -26.81121327463884895792 -29.88118462370803030126 -24.52085286358333959811 Q -30.00808658231651904202 -22.22921945557444800556 -30.10945108794908975369 -19.87420744238127667813 Q -30.21114901796914864462 -17.51800505858246026492 -30.28726311535075055303 -15.09850366921353526095 Q -30.36366735898747393207 -12.67788857784880640622 -30.41444737557619859558 -10.19404831480827411383 Q -30.46547982578850266577 -7.70916544511976820075 -30.49085283086571607214 -5.16112585604285101226 Z ' ), new phet.kite.Shape( 'M 15.73091320135095472210 98.74060470818979240448 Q 16.35535838468567604309 99.30935466199537131615 16.99756038043535610882 99.81844045123551723009 A 8.00000000000000000000 8.00000000000000000000 0 1 1 7.00243961956460747587 112.31234140232403717619 Q 5.98736988208338871686 111.49560980497949458368 5.00633307385064352246 110.61424699220800960120 Q 4.03352046963739940821 109.73103491216652116691 3.09484402223464005743 108.78443380937933682162 Q 2.16436317727153326729 107.83716663938923829846 1.26787126950474160481 106.82762338877823538041 Q 0.37932327147925182231 105.81844829958833997807 -0.47557743302119970252 104.74794686707454616226 Q -1.32295140299107494286 103.67867552327963664993 -2.13715686248687486426 102.54885081609010910597 Q -2.94436285425170174435 101.42094096228946398242 -3.71896397984830517913 100.23307657217287669482 Q -4.48715471154191192227 99.04764342982173275232 -5.22334536369993607252 97.80269414544925155042 Q -5.95373765322157844082 96.56054159182671980943 -6.65274189284679717815 95.25917097447093340179 Q -7.34655371409177426756 93.96083348316355454699 -8.00957234087112546206 92.60345840996271249423 Q -8.66797829629204663604 91.24924671495705297275 -9.29615255640397109005 89.83608295566905610485 Q -9.92025503159801047559 88.42612858852541535271 -10.51464439176406351351 86.95723358162247507153 Q -11.10545712114585015229 85.49152936669304381212 -11.66702782617165645718 83.96684008536361432107 Q -12.22546869049076434521 82.44527517017134243815 -12.75509010928117703543 80.86464022508403104439 Q -13.28198040587967199144 79.28702925315000982209 -13.78042667132420717735 77.65023520108915988658 Q -14.27649463786696060197 76.01634187180839319353 -14.74444963440335243376 74.32313417663799270940 Q -15.21033654151039016256 72.63268977918517066428 -15.64840079993386900981 70.88278910269752941531 Q -16.08466839538531090170 69.13550675232390574365 -16.49336687796628453384 67.32862132322549086894 Q -16.90050534292048922680 65.52420664469509858918 -17.28029543429131820176 63.66004142982735913847 Q -17.65873130092757747889 61.79820037939251164971 -18.01001056870106964425 59.87646370792094785429 Q -18.36011426026682258339 57.95690813913238059740 -18.68322772777446871828 55.97731633724841060484 Q -19.00532053111311370230 53.99976781992772600915 -19.30056732810067998685 51.96204831805536628053 Q -19.59492770999300859103 49.92624062691419339899 -19.86256704934179850852 47.83013391285810200770 Q -20.12943629404943379768 45.73581451900192718085 -20.36969277500313069140 43.58107523313059772363 Q -20.60927996139205831128 41.42800606051699219279 -20.82234823126626110934 39.21440346411174715513 Q -21.03483459155381396499 37.00236111413506989720 -21.22088341515704712492 34.72967910894799814514 Q -21.40642612936654032296 32.45845470871412885572 -21.56560192320486990525 30.12649154327121081565 Q -21.72433740790641820695 27.79589033532043984565 -21.85676729809519969194 25.40445809999855342198 Q -21.98881404780404480448 23.01429886163005988919 -22.09460850882534188599 20.56322284845352754701 Q -22.20006954545914723553 18.11333720588262252704 -22.27932467306794706019 15.60245518888950755354 Q -22.35828965442162896693 13.09268687389222485251 -22.41108912115983287094 10.52184835057842171580 Q -22.46363615427446092099 7.95205243391256821894 -22.49005289086071712745 5.32111785664280390051 Q -22.51625009096352769689 2.69115998245441856440 -22.51634773169494962985 0.00000000000000000000 A 8.00000000000000000000 8.00000000000000000000 0 1 1 -6.51634773169494962985 0.00000000000000000000 Q -6.51644537242637067465 2.61210956388457171684 -6.49085283086571696032 5.16112585604285634133 Q -6.46547982578850710667 7.70916544511976198351 -6.41444737557619770740 10.19404831480825812662 Q -6.36366735898746771483 12.67788857784880640622 -6.28726311535074877668 15.09850366921355302452 Q -6.21114901796915130916 17.51800505858246737034 -6.10945108794908975369 19.87420744238126957271 Q -6.00808658231651904202 22.22921945557444445285 -5.88118462370802852490 24.52085286358333959811 Q -5.75466580557947970931 26.81121327463885606335 -5.60266284030022987395 29.03810933307316233254 Q -5.45110018415775599010 31.26364343401530732081 -5.27411470672298143825 33.42562092017418962087 Q -5.09763533868194951282 35.58614080137986945829 -4.89580376566176589392 37.68300495780361103471 Q -4.69455410222823488198 39.77830886779878483139 -4.46803361364596351990 41.80985082159329380147 Q -4.24218241962846231985 43.83972266213007884517 -3.99115424770143167876 45.80571901468968576410 Q -3.74089617041555122512 47.76992804704937611859 -3.46556939400974783894 49.67014072233168064940 Q -3.19112903269917946858 51.56844158688279833314 -2.89174493607622462577 53.40261805599325839466 Q -2.59338150362227182200 55.23475124054043305932 -2.27021855356295798600 57.00262527819068480994 Q -1.94823117971138692894 58.76831821315796844374 -1.60161066305910981811 60.46961138916962852363 Q -1.25634437114140062874 62.16858040074838953615 -0.88663671114360909087 63.80300456867216496448 Q -0.51848906877258205128 65.43495798602795332499 -0.12612079760855543498 67.00221910211621434428 Q 0.26445081058343422598 68.56686189209045778625 0.67898951175532928914 70.06666558110718767693 Q 1.09146012349787024931 71.56370597240633912861 1.52760750689751922948 72.99576534960279161623 Q 1.96137659139538467201 74.42492400401916086139 2.41849138640275906909 75.78897035857005448634 Q 2.87287505921821217925 77.14999273996765793981 3.35022902816843703988 78.44578977126796814900 Q 3.82445315641196526002 79.73846243643112075006 4.32122500196297920638 80.96582478800196724933 Q 4.81442021672972586543 82.18999634759930472683 5.32969205813195312516 83.34881316696360897822 Q 5.84089211461629620459 84.50442059418355711387 6.37365021745512727591 85.59468470569356668420 Q 6.90179564893549191140 86.68178543900830845814 7.45093762761371536385 87.70362837422423751832 Q 7.99488718791169894473 88.72243818339175902565 8.55923843997674538286 89.67617067630027349878 Q 9.11779132940536740648 90.62710643845872482416 9.69613388096189510179 91.51326296264625170807 Q 10.26806603861542477318 92.39698823906833524688 10.85918307176419972393 93.21637267181402819460 Q 11.44330063718200030110 94.03384225117083872192 12.04603943378919339580 94.78756981392996294744 Q 12.64125149586580931782 95.54006728797020286947 13.25460600608085215413 96.22959572534200844984 Q 13.86001660655459488680 96.91875600129270651450 14.48322801149548411104 97.54589697787199042978 Q 15.09824381399673143278 98.17370402165421694463 15.73091320135094939303 98.74060470818979240448 Z ' ), new phet.kite.Shape( 'M -6.49085283086571696032 -5.16112585604285634133 Q -6.51644537242637067465 -2.61210956388457171684 -6.51634773169494962985 0.00000000000000000000 A 8.00000000000000000000 8.00000000000000000000 0 1 1 -22.51634773169494962985 0.00000000000000097972 Q -22.51625009096352769689 -2.69115998245441856440 -22.49005289086071712745 -5.32111785664280390051 Q -22.46363615427446092099 -7.95205243391256821894 -22.41108912115983287094 -10.52184835057842171580 Q -22.35828965442162896693 -13.09268687389222485251 -22.27932467306794706019 -15.60245518888950755354 Q -22.20006954545914723553 -18.11333720588262252704 -22.09460850882534188599 -20.56322284845352754701 Q -21.98881404780404480448 -23.01429886163005988919 -21.85676729809519969194 -25.40445809999856052741 Q -21.72433740790641820695 -27.79589033532043984565 -21.56560192320486990525 -30.12649154327120371022 Q -21.40642612936654032296 -32.45845470871412885572 -21.22088341515704712492 -34.72967910894799814514 Q -21.03483459155381396499 -37.00236111413506989720 -20.82234823126626110934 -39.21440346411174715513 Q -20.60927996139205831128 -41.42800606051699219279 -20.36969277500313069140 -43.58107523313059772363 Q -20.12943629404943379768 -45.73581451900192718085 -19.86256704934179850852 -47.83013391285810200770 Q -19.59492770999300859103 -49.92624062691419339899 -19.30056732810067998685 -51.96204831805536628053 Q -19.00532053111311370230 -53.99976781992772600915 -18.68322772777446871828 -55.97731633724841060484 Q -18.36011426026682258339 -57.95690813913238059740 -18.01001056870106964425 -59.87646370792095495972 Q -17.65873130092757747889 -61.79820037939251164971 -17.28029543429131820176 -63.66004142982735913847 Q -16.90050534292048922680 -65.52420664469509858918 -16.49336687796628098113 -67.32862132322550507979 Q -16.08466839538531090170 -69.13550675232390574365 -15.64840079993386900981 -70.88278910269752941531 Q -15.21033654151039016256 -72.63268977918517066428 -14.74444963440335243376 -74.32313417663799270940 Q -14.27649463786696060197 -76.01634187180839319353 -13.78042667132420717735 -77.65023520108915988658 Q -13.28198040587967199144 -79.28702925315000982209 -12.75509010928118058814 -80.86464022508403104439 Q -12.22546869049076434521 -82.44527517017134243815 -11.66702782617165645718 -83.96684008536361432107 Q -11.10545712114585015229 -85.49152936669304381212 -10.51464439176406351351 -86.95723358162247507153 Q -9.92025503159801047559 -88.42612858852541535271 -9.29615255640397109005 -89.83608295566905610485 Q -8.66797829629204485968 -91.24924671495705297275 -8.00957234087114322563 -92.60345840996268407253 Q -7.34655371409177426756 -93.96083348316355454699 -6.65274189284679628997 -95.25917097447093340179 Q -5.95373765322157844082 -96.56054159182671980943 -5.22334536369995916516 -97.80269414544920891785 Q -4.48715471154191192227 -99.04764342982173275232 -3.71896397984830517913 -100.23307657217287669482 Q -2.94436285425170174435 -101.42094096228946398242 -2.13715686248687575244 -102.54885081609010910597 Q -1.32295140299107494286 -103.67867552327963664993 -0.47557743302119970252 -104.74794686707454616226 Q 0.37932327147925182231 -105.81844829958833997807 1.26787126950474160481 -106.82762338877823538041 Q 2.16436317727153326729 -107.83716663938923829846 3.09484402223464627468 -108.78443380937935103248 Q 4.03352046963739940821 -109.73103491216652116691 5.00633307385064973971 -110.61424699220800960120 Q 5.98736988208338871686 -111.49560980497949458368 7.00243961956464477936 -112.31234140232407980875 A 8.00000000000000000000 8.00000000000000000000 0 1 1 16.99756038043539518867 -99.81844045123555986265 Q 16.35535838468567604309 -99.30935466199537131615 15.73091320135095472210 -98.74060470818979240448 Q 15.09824381399673143278 -98.17370402165421694463 14.48322801149549121646 -97.54589697787200464063 Q 13.86001660655459488680 -96.91875600129270651450 13.25460600608085215413 -96.22959572534200844984 Q 12.64125149586580931782 -95.54006728797020286947 12.04603943378919339580 -94.78756981392996294744 Q 11.44330063718200030110 -94.03384225117083872192 10.85918307176419972393 -93.21637267181402819460 Q 10.26806603861542477318 -92.39698823906833524688 9.69613388096189510179 -91.51326296264625170807 Q 9.11779132940536740648 -90.62710643845872482416 8.55923843997672229023 -89.67617067630023086622 Q 7.99488718791169894473 -88.72243818339175902565 7.45093762761371625203 -87.70362837422423751832 Q 6.90179564893549191140 -86.68178543900830845814 6.37365021745511217688 -85.59468470569353826249 Q 5.84089211461629620459 -84.50442059418355711387 5.32969205813195312516 -83.34881316696360897822 Q 4.81442021672972497726 -82.18999634759930472683 4.32122500196297920638 -80.96582478800196724933 Q 3.82445315641196526002 -79.73846243643112075006 3.35022902816843703988 -78.44578977126796814900 Q 2.87287505921821217925 -77.14999273996765793981 2.41849138640275640455 -75.78897035857005448634 Q 1.96137659139538467201 -74.42492400401916086139 1.52760750689751922948 -72.99576534960279161623 Q 1.09146012349787024931 -71.56370597240633912861 0.67898951175532928914 -70.06666558110718767693 Q 0.26445081058343422598 -68.56686189209045778625 -0.12612079760855543498 -67.00221910211621434428 Q -0.51848906877258205128 -65.43495798602795332499 -0.88663671114360553815 -63.80300456867217917534 Q -1.25634437114140062874 -62.16858040074838953615 -1.60161066305910981811 -60.46961138916962852363 Q -1.94823117971138692894 -58.76831821315796844374 -2.27021855356295798600 -57.00262527819069191537 Q -2.59338150362227182200 -55.23475124054043305932 -2.89174493607622462577 -53.40261805599325839466 Q -3.19112903269917946858 -51.56844158688279833314 -3.46556939400974783894 -49.67014072233168064940 Q -3.74089617041555122512 -47.76992804704937611859 -3.99115424770143167876 -45.80571901468968576410 Q -4.24218241962846231985 -43.83972266213007884517 -4.46803361364596351990 -41.80985082159329380147 Q -4.69455410222823488198 -39.77830886779878483139 -4.89580376566176589392 -37.68300495780361103471 Q -5.09763533868194951282 -35.58614080137986945829 -5.27411470672298143825 -33.42562092017418962087 Q -5.45110018415775599010 -31.26364343401530732081 -5.60266284030022987395 -29.03810933307315522711 Q -5.75466580557947970931 -26.81121327463885606335 -5.88118462370802852490 -24.52085286358334670354 Q -6.00808658231651904202 -22.22921945557444445285 -6.10945108794908975369 -19.87420744238126957271 Q -6.21114901796915130916 -17.51800505858246737034 -6.28726311535074877668 -15.09850366921355302452 Q -6.36366735898746771483 -12.67788857784880640622 -6.41444737557619770740 -10.19404831480825812662 Q -6.46547982578850710667 -7.70916544511976198351 -6.49085283086571696032 -5.16112585604285634133 Z ' ), new phet.kite.Shape( 'M 18.99398213525316236883 -101.77232270550136661313 Q 18.33736398774731668482 -101.08959654816817419487 17.65685424949237969372 -100.40853667728741527299 A 8.00000000000000000000 8.00000000000000000000 0 1 1 6.34314575050762030628 -111.72224517627218176585 Q 6.91263601225268420336 -112.29118530539142284397 7.45718973974683585482 -112.85845914805823042570 Q 8.00123997347032478444 -113.42401822470421279831 8.52039390005925945104 -113.98781344469391285656 Q 9.03908923944888975655 -114.54979520436693007923 9.53293813468415152101 -115.10991349879691370006 Q 10.02638354366240136528 -115.66811804826654963563 10.49504313193687465855 -116.22435844045806163649 Q 10.96336566556112579462 -116.77858428934464996019 11.40697490279498715893 -117.33074541173773752689 Q 11.85032598332195163948 -117.88079202239420339993 12.26904931344777160973 -118.42867494851509491127 Q 12.68760694556181434223 -118.97434586436844483615 13.08163644994870011828 -119.51775754664129181037 Q 13.47560727684072645616 -120.05886415096662744872 13.84516460640505997048 -120.59762150987631912358 Q 14.21478568416804932895 -121.13398745219879515389 14.56012363919716179339 -121.66792214364804181059 Q 14.90566378219507015501 -122.19938844803601796229 15.22706738051700980918 -122.72835230818348861703 Q 15.54882790700911598947 -123.25478314520411515787 15.84661475949028641708 -123.77865427439471091020 Q 16.14492944767225068858 -124.29994333548376062026 16.41944924434071495511 -124.81863273447379469872 Q 16.69468329771448011911 -125.33471009376965810134 16.94631620206827449238 -125.84816870671885169486 Q 17.19886402395737690085 -126.35900799211634648600 17.42801778172560034363 -126.86723394365414208096 Q 17.65829937641916913549 -127.37285956874258374683 17.86540497277123051845 -127.87590531061280785252 Q 18.07386082956717388015 -128.37639944714587159069 18.25936657944764363037 -128.87437845948693393439 Q 18.44645095904886744620 -129.36988736321166015841 18.61081499130916228069 -129.86297999464079566678 Q 18.77698762277242749974 -130.35371924486742045701 18.92066881977522641023 -130.84217723419027379350 Q 19.06638512849045241637 -131.32843541995237046649 19.18983270489025017014 -131.81258463128074254200 Q 19.31553282175204699911 -132.29472502491699970051 19.41917486082990507157 -132.77496595722325878342 Q 19.52527179921310107602 -133.25342576853813625348 19.60950319965743560147 -133.73023147732962456757 Q 19.69637071526739546812 -134.20551838302603187003 19.76154111929572110284 -134.67942957797259850850 Q 19.82950187098316519041 -135.15211537062558022626 19.87590422826367841935 -135.62373262381160543555 Q 19.92521891779499298991 -136.09444401360130427747 19.95307937213689086775 -136.56441721602124061974 Q 19.98393754299513247474 -137.03382403040109238646 19.99340729829364704528 -137.50283944957368476025 Q 20.00592040945776517447 -137.97164068836394790196 19.99707013372243835647 -138.44040618277546172976 Q 19.99126739456573886855 -138.90931457297546103291 19.96408456156015631677 -139.37854368356434520138 Q 19.93991182908662196382 -139.84826951468076572382 19.89430119152569531593 -140.31866525723532390657 Q 19.85162301078283419997 -140.78990034499346961638 19.78741017037209815044 -141.26213955536437083538 Q 19.72601480882244473491 -141.73554216962776308719 19.64295262392197116696 -142.21026120198513353898 Q 19.56255973830815264591 -142.68644270530361950478 19.46033711616654926502 -143.16422515977976104296 Q 19.36060752032632592545 -143.64373894904250050786 19.23885999883734498894 -144.12510592648914098390 A 8.00000000000000000000 8.00000000000000000000 0 1 1 34.76114000116265856377 -148.00567592707045605493 Q 34.95189247967367407455 -147.23704290451709653098 35.11583475883345073498 -146.46655669377983599588 Q 35.27728401169184735409 -145.69433914825597753406 35.41173487607802883304 -144.92052065157446349986 Q 35.54351644117755881780 -144.14523968393183395165 35.64813670462790184956 -143.36864229819522620346 Q 35.74993948921716224731 -142.59088150856612742245 35.82444880847430823678 -141.81211659632427313227 Q 35.89602567091337448346 -141.03251233887883131501 35.94021231343984368323 -140.25223816999525183746 Q 35.98138885543426113145 -139.47146728058413600593 35.99511736627756164353 -138.69037567078413530908 Q 36.00579834054223482553 -137.90914116519564913688 35.98901457670635295472 -137.12794240398591227859 Q 35.96918745700486397254 -136.34695782315850465238 35.92192062786310913225 -135.56636463753835641910 Q 35.87165608220500701009 -134.78633783995829276137 35.79401764673632158065 -134.00704922974799160329 Q 35.71346687901683480959 -133.22866648293401681258 35.60564638070427889716 -132.45135227558699853034 Q 35.49503553473260808460 -131.67526347053356516881 35.35729367534256795125 -130.90055037622997247126 Q 35.21691570078689892398 -130.12735608502146078536 35.04957513917009492843 -129.35581589633633825542 Q 34.87977967824795655361 -128.58605682864259733833 34.68321417010974982986 -127.81819722227885449684 Q 34.48439612150954758363 -127.05234643360722657235 34.25901868022477003706 -126.28860461936932324534 Q 34.03160612722757605297 -125.52706260869216237097 33.77785688369083771931 -124.76780185891881558291 Q 33.52229904095113255380 -124.01089449034795109128 33.24063342055235636963 -123.25640339407266310445 Q 32.95738917043282611985 -122.50438240641372544815 32.64826690222876948155 -121.75487654294678918632 Q 32.33779437358083441723 -121.00792228481701329201 32.00166971827439965637 -120.26354790990545495788 Q 31.66441722604262309915 -119.52177386144325055284 31.30173067293172550762 -118.78261314684074534398 Q 30.93812920228551988089 -118.04607175978993893750 30.54930075565928504489 -117.31214911908580234012 Q 30.15975805232774931142 -116.58083851807583641857 29.74518211550971358292 -115.85212757916488612864 Q 29.33007834299088401053 -115.12599870835548188097 28.89012011948299019082 -114.40242954537610842181 Q 28.44980496780492984499 -113.68139340552357907654 27.98479823580283820661 -112.96285970991155522825 Q 27.51958931583195067105 -112.24679440136080188495 27.02983539359494002952 -111.53316034368327791526 Q 26.54001772315927354384 -110.82191770259296959011 26.02578542505129988172 -110.11302430691830522846 Q 25.51161180443818565777 -109.40643598919115220269 24.97313818655222661391 -108.70210690504450212757 Q 24.43483026667804836052 -107.99998983116539363891 23.87232197220501461743 -107.30003644182185951195 Q 23.31007183443887242902 -106.60219756421494707865 22.72370686806312534145 -105.90642341310153540235 Q 22.13767895633759863472 -105.21266380529304740321 21.52760874031584847899 -104.52086835476268333878 Q 20.91794201055110846710 -103.83098664919266695961 20.28429359994073877260 -103.14296840886568418227 Q 19.65110377652967343920 -102.45676362885538424052 18.99398213525316236883 -101.77232270550136661313 Z ' ) ] ); ```