# [sketch-a-day](https://abav.lugaralgum.com/sketch-a-day) ## coding a visual idea a day Welcome! My name is [Alexandre Villares](https://abav.lugaralgum.com) and since January, 2018 I have been coding *sketches* everyday, publishing the source code in the same repository that stores this page, [github.com/villares/sketch-a-day](https://github.com/villares/sketch-a-day). The results here are mostly tentative, exploratory, and I don’t feel like they need to be relevant or meaningful on any particular day. The everyday practice leads to the emergence of ideas that I consider interesting, worthy of further exploration. Some of those have been added to [selected work](https://abav.lugaralgum.com/selected-work/index-EN.html), this collection itself became valuable for me, and it is my pleasure to share it with anyone willing to explore coding as a creative and expressive medium. To support my artistic work, research and open educational resources I freely publish on-line, donate using [Wise](https://wise.com/pay/me/alexandrev562), [Liberapay](https://liberapay.com/villares), [PayPal](https://www.paypal.com/donate/?hosted_button_id=5B4MZ78C9J724), or to the Brazilan PIX key `46c37783-5edb-4f1c-b3a8-1309db11488c`. You can follow me on Mastodon [@villares@ciberlandia.pt](https://ciberlandia.pt/@villares) or at @villares@pynews.com.br, where I post most of my daily sketches. Please do not hesitate to [contact me](http://contato.lugaralgum.com) regarding licenses to use my work, teaching opportunities, consulting or other projects. --- [2026](README.md) \| 2025 \| [2024](2024.md) \| [2023](2023.md) \| [2022](2022.md) \| [2021](2021.md) \| [2020](2020.md) \| [2019](2019.md) \| [2018](2018.md) --- ### sketch_2025_12_31 ![sketch_2025_12_31](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_31/sketch_2025_12_31.gif) [sketch_2025_12_31](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_31) [[py5](https://py5coding.org/)] Happy new year! --- ### sketch_2025_12_30 ![sketch_2025_12_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_30/sketch_2025_12_30.gif) [sketch_2025_12_30](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_30) [[py5](https://py5coding.org/)] Playing with the #numpy @ operator and a rotation matrix :) --- ### sketch_2025_12_29 ![sketch_2025_12_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_29/sketch_2025_12_29.png) [sketch_2025_12_29](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_29) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_28 ![sketch_2025_12_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_28/sketch_2025_12_28.gif) [sketch_2025_12_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_28) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_27 ![sketch_2025_12_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_27/sketch_2025_12_27.gif) [sketch_2025_12_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_27) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_26 ![sketch_2025_12_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_26/sketch_2025_12_26.gif) [sketch_2025_12_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_26) [[py5](https://py5coding.org/)] WIP... --- ### sketch_2025_12_25 ![sketch_2025_12_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_25/sketch_2025_12_25.gif) [sketch_2025_12_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_25) [[py5](https://py5coding.org/)] Merry Christmas! --- ### sketch_2025_12_24 ![sketch_2025_12_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_24/sketch_2025_12_24.gif) [sketch_2025_12_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_24) [[py5](https://py5coding.org/)] Simpler neighbors (the 8 closest on a square grid), and the `ortho()` projection turning off perspective. --- ### sketch_2025_12_23 ![sketch_2025_12_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_23/sketch_2025_12_23.gif) [sketch_2025_12_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_23) [[py5](https://py5coding.org/)] This is an easy evolution, with many starting points. The orbiting interaction is quite fun, but hard to capture on a video/gif. --- ### sketch_2025_12_22 ![sketch_2025_12_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_22/sketch_2025_12_22.gif) [sketch_2025_12_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_22) [[py5](https://py5coding.org/)] I still have to work out what I want to do with the overlapping path edges... While I don't, moving a bit on Z gives a cool result and avoids the flickering superposition of edges. --- ### sketch_2025_12_21 ![sketch_2025_12_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_21/sketch_2025_12_21.png) [sketch_2025_12_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_21) [[py5](https://py5coding.org/)] Experimenting with multiple starting points (and the dark background). Maybe tomorrow I'll try to animate these a bit... --- ### sketch_2025_12_20 ![sketch_2025_12_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_20/sketch_2025_12_20.png) [sketch_2025_12_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_20) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_19 ![sketch_2025_12_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_19/sketch_2025_12_19.png) [sketch_2025_12_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_19) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_18 ![sketch_2025_12_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_18/sketch_2025_12_18.png) [sketch_2025_12_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_18) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_17 ![sketch_2025_12_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_17/sketch_2025_12_17.png) [sketch_2025_12_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_17) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_16 ![sketch_2025_12_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_16/sketch_2025_12_16.gif) [sketch_2025_12_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_16) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_15 ![sketch_2025_12_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_15/sketch_2025_12_15.png) [sketch_2025_12_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_15) [[py5](https://py5coding.org/)] I'm back to this simple "graph" idea from 2021, re-doing it from scratch... it provides endless fun/explorations. In 2022 I think I did so much stuff with this... --- ### sketch_2025_12_14 ![sketch_2025_12_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_14/sketch_2025_12_14.png) [sketch_2025_12_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_14) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_13 ![sketch_2025_12_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_13/sketch_2025_12_13.png) [sketch_2025_12_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_13) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_12 ![sketch_2025_12_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_12/sketch_2025_12_12.png) [sketch_2025_12_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_12) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_11 ![sketch_2025_12_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_11/sketch_2025_12_11.png) [sketch_2025_12_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_11) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_10 ![sketch_2025_12_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_10/sketch_2025_12_10.png) [sketch_2025_12_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_10) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_09 ![sketch_2025_12_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_09/sketch_2025_12_09.png) [sketch_2025_12_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_09) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_08 ![sketch_2025_12_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_08/sketch_2025_12_08.png) [sketch_2025_12_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_08) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_07 ![sketch_2025_12_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_07/sketch_2025_12_07.png) [sketch_2025_12_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_07) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_06 ![sketch_2025_12_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_06/sketch_2025_12_06.png) [sketch_2025_12_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_06) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_05 ![sketch_2025_12_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_05/sketch_2025_12_05.png) [sketch_2025_12_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_05) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_04 ![sketch_2025_12_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_04/sketch_2025_12_04.png) [sketch_2025_12_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_04) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_03 ![sketch_2025_12_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_03/sketch_2025_12_03.png) [sketch_2025_12_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_03) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_02 ![sketch_2025_12_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_02/sketch_2025_12_02.gif) [sketch_2025_12_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_02) [[py5](https://py5coding.org/)] --- ### sketch_2025_12_01 ![sketch_2025_12_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_12_01/sketch_2025_12_01.png) [sketch_2025_12_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_12_01) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_30 ![sketch_2025_11_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_30/sketch_2025_11_30.gif) [sketch_2025_11_30](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_30) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_29 ![sketch_2025_11_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_29/sketch_2025_11_29.png) [sketch_2025_11_29](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_29) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_28 ![sketch_2025_11_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_28/sketch_2025_11_28.png) [sketch_2025_11_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_28) [[py5](https://py5coding.org/)] exploring and idea with #particles that started in class today... --- ### sketch_2025_11_27 ![sketch_2025_11_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_27/sketch_2025_11_27.png) [sketch_2025_11_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_27) [[py5](https://py5coding.org/)] #OpenSimplexNoise experiments. --- ### sketch_2025_11_26 ![sketch_2025_11_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_26/sketch_2025_11_26.png) [sketch_2025_11_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_26) [[py5](https://py5coding.org/)] A #PerlinNoise interactive example made during class today. Check an [animation from recording the screen](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_26/sketch_2025_11_26.mp4) --- ### sketch_2025_11_25 ![sketch_2025_11_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_25/sketch_2025_11_25.png) [sketch_2025_11_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_25) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_24 ![sketch_2025_11_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_24/sketch_2025_11_24.png) [sketch_2025_11_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_24) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_23 ![sketch_2025_11_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_23/sketch_2025_11_23.png) [sketch_2025_11_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_23) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_22 ![sketch_2025_11_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_22/sketch_2025_11_22.png) [sketch_2025_11_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_22) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_21 ![sketch_2025_11_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_21/sketch_2025_11_21.gif) [sketch_2025_11_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_21) [[py5](https://py5coding.org/)] #LSystem --- ### sketch_2025_11_20 ![sketch_2025_11_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_20/sketch_2025_11_20.png) [sketch_2025_11_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_20) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_19 ![sketch_2025_11_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_19/sketch_2025_11_19.png) [sketch_2025_11_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_19) [[py5](https://py5coding.org/)] A naïve spiral function made during class! --- ### sketch_2025_11_18 ![sketch_2025_11_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_18/sketch_2025_11_18.png) [sketch_2025_11_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_18) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_17 ![sketch_2025_11_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_17/sketch_2025_11_17.png) [sketch_2025_11_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_17) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_16 ![sketch_2025_11_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_16/sketch_2025_11_16.png) [sketch_2025_11_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_16) [[py5](https://py5coding.org/)] Checking "walk" and "all" networks on #osmnx using data from #OpenStreetMap for #SãoPaulo. --- ### sketch_2025_11_15 ![sketch_2025_11_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_15/sketch_2025_11_15.png) [sketch_2025_11_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_15) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_14 ![sketch_2025_11_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_14/sketch_2025_11_14.gif) [sketch_2025_11_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_14) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_13 ![sketch_2025_11_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_13/sketch_2025_11_13.png) [sketch_2025_11_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_13) [[py5](https://py5coding.org/)] Made today during class at Sesc with data from #OpenStreetMap using #osmnx --- ### sketch_2025_11_12 ![sketch_2025_11_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_12/sketch_2025_11_12.gif) [sketch_2025_11_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_12) [[py5](https://py5coding.org/)] We made this today in class, an example with elements inspired by #VeraMolnar --- ### sketch_2025_11_11 ![sketch_2025_11_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_11/sketch_2025_11_11.png) [sketch_2025_11_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_11) [[py5](https://py5coding.org/)] I'm back trying to make #ParticleLife run faster, this time with #scipy #cKDTree. --- ### sketch_2025_11_10 ![sketch_2025_11_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_10/sketch_2025_11_10.png) [sketch_2025_11_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_10) [[py5](https://py5coding.org/)] Converting to py5 some Processing Java code by @Introscopia@coletivos.org for drawing a "bezier egg". Thank you John! --- ### sketch_2025_11_09 ![sketch_2025_11_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_09/sketch_2025_11_09.png) [sketch_2025_11_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_09) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_08 ![sketch_2025_11_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_08/sketch_2025_11_08.png) [sketch_2025_11_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_08) [[py5](https://py5coding.org/)] #OpenStreetMap #osmnx #OSM #geopandas --- ### sketch_2025_11_07 ![sketch_2025_11_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_07/sketch_2025_11_07.png) [sketch_2025_11_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_07) [[py5](https://py5coding.org/)] #SãoPaulo --- ### sketch_2025_11_06 ![sketch_2025_11_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_06/sketch_2025_11_06.png) [sketch_2025_11_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_06) [[py5](https://py5coding.org/)] #São Paulo, "walk networks", dados do #OpenStreetMap --- ### sketch_2025_11_05 ![sketch_2025_11_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_05/sketch_2025_11_05.png) [sketch_2025_11_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_05) [[py5](https://py5coding.org/)] --- ### sketch_2025_11_04 ![sketch_2025_11_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_04/sketch_2025_11_04.png) [sketch_2025_11_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_04) [[py5](https://py5coding.org/)] #OpenStreetMap --- ### sketch_2025_11_03 ![sketch_2025_11_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_03/sketch_2025_11_03.png) [sketch_2025_11_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_03) [[py5](https://py5coding.org/)] Back to my map studies... Poly data (c) #OpenStreetMap contributors \nhttps://www.openstreetmap.org/copyright --- ### sketch_2025_11_02 ![sketch_2025_11_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_02/sketch_2025_11_02.png) [sketch_2025_11_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_02) [[py5](https://py5coding.org/)] failed #mediapipe experiment... --- ### sketch_2025_11_01 ![sketch_2025_11_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_11_01/sketch_2025_11_01.gif) [sketch_2025_11_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_11_01) [[py5](https://py5coding.org/)] Feito a maior parte duarante a apresentação no Compoética 2025 --- ### sketch_2025_10_31 ![sketch_2025_10_31](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_31/sketch_2025_10_31.png) [sketch_2025_10_31](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_31) [[py5](https://py5coding.org/)] #LSystem & #shapely --- ### sketch_2025_10_30 ![sketch_2025_10_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_30/sketch_2025_10_30.gif) [sketch_2025_10_30](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_30) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_29 ![sketch_2025_10_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_29/sketch_2025_10_29.gif) [sketch_2025_10_29](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_29) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_28 ![sketch_2025_10_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_28/sketch_2025_10_28.png) [sketch_2025_10_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_28) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_27 ![sketch_2025_10_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_27/sketch_2025_10_27.png) [sketch_2025_10_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_27) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_26 ![sketch_2025_10_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_26/sketch_2025_10_26.png) [sketch_2025_10_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_26) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_25 ![sketch_2025_10_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_25/sketch_2025_10_25.png) [sketch_2025_10_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_25) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_24 ![sketch_2025_10_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_24/sketch_2025_10_24.png) [sketch_2025_10_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_24) [[py5](https://py5coding.org/)] WIP --- ### sketch_2025_10_23 ![sketch_2025_10_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_23/sketch_2025_10_23.png) [sketch_2025_10_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_23) [[py5](https://py5coding.org/)] Exemplo feito durante o tutorial apresentado na #PythoBrasil2025 sobre #shapely e #trimesh com o mantenedor no py5, Jim! --- ### sketch_2025_10_22 ![sketch_2025_10_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_22/sketch_2025_10_22.gif) [sketch_2025_10_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_22) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_21 ![sketch_2025_10_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_21/sketch_2025_10_21.gif) [sketch_2025_10_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_21) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_20 ![sketch_2025_10_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_20/sketch_2025_10_20.gif) [sketch_2025_10_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_20) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_19 ![sketch_2025_10_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_19/sketch_2025_10_19.gif) [sketch_2025_10_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_19) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_18 ![sketch_2025_10_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_18/sketch_2025_10_18.gif) [sketch_2025_10_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_18) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_17 ![sketch_2025_10_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_17/sketch_2025_10_17.gif) [sketch_2025_10_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_17) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_16 ![sketch_2025_10_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_16/sketch_2025_10_16.png) [sketch_2025_10_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_16) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_15 ![sketch_2025_10_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_15/sketch_2025_10_15.png) [sketch_2025_10_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_15) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_14 ![sketch_2025_10_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_14/sketch_2025_10_14.gif) [sketch_2025_10_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_14) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_13 ![sketch_2025_10_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_13/sketch_2025_10_13.png) [sketch_2025_10_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_13) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_12 ![sketch_2025_10_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_12/sketch_2025_10_12.gif) [sketch_2025_10_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_12) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_11 ![sketch_2025_10_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_11/sketch_2025_10_11.gif) [sketch_2025_10_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_11) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_10 ![sketch_2025_10_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_10/sketch_2025_10_10.gif) [sketch_2025_10_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_10) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_09 ![sketch_2025_10_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_09/sketch_2025_10_09.png) [sketch_2025_10_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_09) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_08 ![sketch_2025_10_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_08/sketch_2025_10_08.gif) [sketch_2025_10_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_08) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_07 ![sketch_2025_10_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_07/sketch_2025_10_07.gif) [sketch_2025_10_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_07) [[py5](https://py5coding.org/)] This was fun! Mutating L-System rules by randomly permutating symbols from "X" -> "F+[[X]-X]-F[-FX]+X". Note that invalid rules break things, like when you have ] before [... More about L-Systems: https://github.com/villares/python-in-a-visual-context/blob/main/Processing-Python-py5/LSystem.md See the rules in the the PNG names at the repo folder. --- ### sketch_2025_10_06 ![sketch_2025_10_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_06/sketch_2025_10_06.png) [sketch_2025_10_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_06) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_05 ![sketch_2025_10_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_05/sketch_2025_10_05.png) [sketch_2025_10_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_05) [[py5](https://py5coding.org/)] back to some nice polygons --- ### sketch_2025_10_04 ![sketch_2025_10_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_04/sketch_2025_10_04.png) [sketch_2025_10_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_04) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_03 ![sketch_2025_10_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_03/sketch_2025_10_03.png) [sketch_2025_10_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_03) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_02 ![sketch_2025_10_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_02/sketch_2025_10_02.png) [sketch_2025_10_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_02) [[py5](https://py5coding.org/)] --- ### sketch_2025_10_01 ![sketch_2025_10_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_10_01/sketch_2025_10_01.png) [sketch_2025_10_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_10_01) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_30 ![sketch_2025_09_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_30/sketch_2025_09_30.png) [sketch_2025_09_30](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_30) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_29 ![sketch_2025_09_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_29/sketch_2025_09_29.png) [sketch_2025_09_29](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_29) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_28 ![sketch_2025_09_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_28/sketch_2025_09_28.png) [sketch_2025_09_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_28) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_27 ![sketch_2025_09_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_27/sketch_2025_09_27.png) [sketch_2025_09_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_27) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_26 ![sketch_2025_09_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_26/sketch_2025_09_26.png) [sketch_2025_09_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_26) [[py5](https://py5coding.org/)] #shapely #viridis --- ### sketch_2025_09_25 ![sketch_2025_09_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_25/sketch_2025_09_25.png) [sketch_2025_09_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_25) [[py5](https://py5coding.org/)] #shapely #viridis --- ### sketch_2025_09_24 ![sketch_2025_09_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_24/sketch_2025_09_24.png) [sketch_2025_09_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_24) [[py5](https://py5coding.org/)] #shapely --- ### sketch_2025_09_23 ![sketch_2025_09_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_23/sketch_2025_09_23.png) [sketch_2025_09_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_23) [[py5](https://py5coding.org/)] WIP --- ### sketch_2025_09_22 ![sketch_2025_09_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_22/sketch_2025_09_22.png) [sketch_2025_09_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_22) [[py5](https://py5coding.org/)] #viridis --- ### sketch_2025_09_21 ![sketch_2025_09_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_21/sketch_2025_09_21.png) [sketch_2025_09_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_21) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_20 ![sketch_2025_09_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_20/sketch_2025_09_20.png) [sketch_2025_09_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_20) [[py5](https://py5coding.org/)] WIP --- ### sketch_2025_09_19 ![sketch_2025_09_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_19/sketch_2025_09_19.png) [sketch_2025_09_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_19) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_18 ![sketch_2025_09_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_18/sketch_2025_09_18.gif) [sketch_2025_09_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_18) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_17 ![sketch_2025_09_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_17/sketch_2025_09_17.png) [sketch_2025_09_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_17) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_16 ![sketch_2025_09_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_16/sketch_2025_09_16.png) [sketch_2025_09_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_16) [[py5](https://py5coding.org/)] the cyclic #twilight #matplotlib #colormap https://matplotlib.org/stable/users/explain/colors/colormaps.html --- ### sketch_2025_09_15 ![sketch_2025_09_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_15/sketch_2025_09_15.png) [sketch_2025_09_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_15) [[py5](https://py5coding.org/)] more #viridis --- ### sketch_2025_09_14 ![sketch_2025_09_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_14/sketch_2025_09_14.png) [sketch_2025_09_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_14) [[py5](https://py5coding.org/)] I like the public domain AIGA pictogram for departures :) --- ### sketch_2025_09_13 ![sketch_2025_09_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_13/sketch_2025_09_13.gif) [sketch_2025_09_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_13) [[py5](https://py5coding.org/)] #veridis --- ### sketch_2025_09_12 ![sketch_2025_09_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_12/sketch_2025_09_12.png) [sketch_2025_09_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_12) [[py5](https://py5coding.org/)] Using py5 #matplotlib #colormap integration: #viridis (https://www.youtube.com/watch?v=xAoljeRJ3lU) --- ### sketch_2025_09_11 ![sketch_2025_09_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_11/sketch_2025_09_11.png) [sketch_2025_09_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_11) [[py5](https://py5coding.org/)] #numpy #shapley #trimesh #stenci --- ### sketch_2025_09_10 ![sketch_2025_09_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_10/sketch_2025_09_10.png) [sketch_2025_09_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_10) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_09 ![sketch_2025_09_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_09/sketch_2025_09_09.png) [sketch_2025_09_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_09) [[py5](https://py5coding.org/)] WIP --- ### sketch_2025_09_08 ![sketch_2025_09_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_08/sketch_2025_09_08.png) [sketch_2025_09_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_08) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_07 ![sketch_2025_09_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_07/sketch_2025_09_07.png) [sketch_2025_09_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_07) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_06 ![sketch_2025_09_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_06/sketch_2025_09_06.png) [sketch_2025_09_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_06) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_05 ![sketch_2025_09_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_05/sketch_2025_09_05.png) [sketch_2025_09_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_05) [[py5](https://py5coding.org/)] 51 unique combinations of 3 triangles from a 3 x 3 grid, avoiding rotations. --- ### sketch_2025_09_04 ![sketch_2025_09_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_04/sketch_2025_09_04.png) [sketch_2025_09_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_04) [[py5](https://py5coding.org/)] All the 197 ways of dividing a 3 x 3 grid with triangles, avoiding rotated configurations. --- ### sketch_2025_09_03 ![sketch_2025_09_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_03/sketch_2025_09_03.png) WIP (broken rotation elimination implementation) ![sketch_2025_09_03_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_03/sketch_2025_09_03_04.png) Fixed the next day! [sketch_2025_09_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_03) [[py5](https://py5coding.org/)] --- ### sketch_2025_09_02 ![sketch_2025_09_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_02/sketch_2025_09_02.png) [sketch_2025_09_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_02) [[py5](https://py5coding.org/)] Probably not very efficient, but a lot of fun! It took about 30min to calculate all the 23903 nonoverlapping combinations of triangles on the 3x3, which then I filtered to get the 747 combinations that fill the square. #shapely --- ### sketch_2025_09_01 ![sketch_2025_09_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_09_01/sketch_2025_09_01.png) [sketch_2025_09_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_09_01) [[py5](https://py5coding.org/)] All 76 possible triangles from connecting points of a 3x3 grid. --- ### sketch_2025_08_31 ![sketch_2025_08_31](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_31/sketch_2025_08_31.png) [sketch_2025_08_31](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_31) [[py5](https://py5coding.org/)] 225 ways of dividing a a 3x3 grid of points with 3, 4 and 5 triangles... #shapely --- ### sketch_2025_08_30 ![sketch_2025_08_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_30/sketch_2025_08_30.gif) [sketch_2025_08_30](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_30) [[py5](https://py5coding.org/)] 7713 combinations of 4 triangles on a 3x3 grid. #shapely --- ### sketch_2025_08_29 ![sketch_2025_08_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_29/sketch_2025_08_29.gif) [sketch_2025_08_29](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_29) [[py5](https://py5coding.org/)] 4304 non-overlapping triangle triplets form points on a 3x3 grid. #shapely --- ### sketch_2025_08_28 ![sketch_2025_08_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_28/sketch_2025_08_28.gif) [sketch_2025_08_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_28) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_27 ![sketch_2025_08_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_27/sketch_2025_08_27.png) [sketch_2025_08_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_27) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_26 ![sketch_2025_08_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_26/sketch_2025_08_26.gif) [sketch_2025_08_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_26) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_25 ![sketch_2025_08_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_25/sketch_2025_08_25.gif) [sketch_2025_08_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_25) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_24 ![sketch_2025_08_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_24/sketch_2025_08_24.gif) [sketch_2025_08_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_24) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_23 ![sketch_2025_08_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_23/sketch_2025_08_23.png) [sketch_2025_08_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_23) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_22 ![sketch_2025_08_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_22/sketch_2025_08_22.png) [sketch_2025_08_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_22) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_21 ![sketch_2025_08_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_21/sketch_2025_08_21.png) [sketch_2025_08_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_21) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_20 ![sketch_2025_08_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_20/sketch_2025_08_20.gif) [sketch_2025_08_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_20) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_19 ![sketch_2025_08_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_19/sketch_2025_08_19.png) [sketch_2025_08_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_19) [[py5](https://py5coding.org/)] WIP: study for modeling Daniel Seda's Modorituk modules. --- ### sketch_2025_08_18 ![sketch_2025_08_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_18/sketch_2025_08_18.png) [sketch_2025_08_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_18) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_17 ![sketch_2025_08_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_17/sketch_2025_08_17.png) [sketch_2025_08_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_17) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_16 ![sketch_2025_08_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_16/sketch_2025_08_16.png) [sketch_2025_08_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_16) [[py5](https://py5coding.org/)] WIP --- ### sketch_2025_08_15 ![sketch_2025_08_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_15/sketch_2025_08_15.png) [sketch_2025_08_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_15) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_14 ![sketch_2025_08_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_14/sketch_2025_08_14.png) [sketch_2025_08_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_14) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_13 ![sketch_2025_08_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_13/sketch_2025_08_13.png) [sketch_2025_08_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_13) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_12 ![sketch_2025_08_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_12/sketch_2025_08_12.png) [sketch_2025_08_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_12) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_11 ![sketch_2025_08_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_11/sketch_2025_08_11.png) [sketch_2025_08_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_11) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_10 ![sketch_2025_08_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_10/sketch_2025_08_10.png) [sketch_2025_08_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_10) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_09 ![sketch_2025_08_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_09/sketch_2025_08_09.png) [sketch_2025_08_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_09) [[py5](https://py5coding.org/)] Revisiting a sketch from 2021... fiddling a bit. Maybe tomorrow I'll advance a bit. --- ### sketch_2025_08_08 ![sketch_2025_08_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_08/sketch_2025_08_08.png) [sketch_2025_08_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_08) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_07 ![sketch_2025_08_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_07/sketch_2025_08_07.png) [sketch_2025_08_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_07) [[py5](https://py5coding.org/)] Playing with an old sketch idea (also present in the Processing Video library examples) ... Frame to glyph grid. I'm using py5, #OpenCV & #NumPy --- ### sketch_2025_08_06 ![sketch_2025_08_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_06/sketch_2025_08_06.gif) [sketch_2025_08_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_06) [[py5](https://py5coding.org/)] --- ### sketch_2025_08_05 ![sketch_2025_08_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_05/sketch_2025_08_05.gif) [sketch_2025_08_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_05) [[py5](https://py5coding.org/)] #NumPy #OpenSimplexNoise #Loop "Noise walkers" --- ### sketch_2025_08_04 ![sketch_2025_08_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_04/sketch_2025_08_04.gif) [sketch_2025_08_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_04) [[py5](https://py5coding.org/)] WIP "Noise walkers" #OpenSimplexNoise --- ### sketch_2025_08_03 ![sketch_2025_08_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_03/sketch_2025_08_03.gif) [sketch_2025_08_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_03) [[py5](https://py5coding.org/)] More #trimesh studies... got back some missing edges, but also got one unwanted edge betweeen two co-planar faces. --- ### sketch_2025_08_02 ![sketch_2025_08_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_02/sketch_2025_08_02.gif) [sketch_2025_08_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_02) [[py5](https://py5coding.org/)] I found a problem with my nice #trimesh mesh drawing helper :((( Single triangle "faces" dont have the edges listed on `mesh.facets_boundary`. So I miss drawing their edges. --- ### sketch_2025_08_01 ![sketch_2025_08_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_08_01/sketch_2025_08_01.gif) [sketch_2025_08_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_08_01) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_31 ![sketch_2025_07_31](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_31/sketch_2025_07_31.gif) [sketch_2025_07_31](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_31) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_30 ![sketch_2025_07_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_30/sketch_2025_07_30.png) [sketch_2025_07_30](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_30) [[py5](https://py5coding.org/)] A quick #shapely & #py5 demo! --- ### sketch_2025_07_29 ![sketch_2025_07_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_29/sketch_2025_07_29.gif) [sketch_2025_07_29](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_29) [[py5](https://py5coding.org/)] #DebugAesthetic I think it worked... --- ### sketch_2025_07_28 ![sketch_2025_07_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_28/sketch_2025_07_28.gif) [sketch_2025_07_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_28) [[py5](https://py5coding.org/)] WIP, I think I found some trouble with colinear vertices! Also, I'm updating my https://abav.lugaralgum.com/arc_tangents_and_bezier_studies/ repo... --- ### sketch_2025_07_27 ![sketch_2025_07_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_27/sketch_2025_07_27.png) [sketch_2025_07_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_27) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_26 ![sketch_2025_07_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_26/sketch_2025_07_26.png) [sketch_2025_07_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_26) [[py5](https://py5coding.org/)] A #py5 multi-page #PDF export example (with a side dish of #shapely). --- ### sketch_2025_07_25 ![sketch_2025_07_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_25/sketch_2025_07_25.png) [sketch_2025_07_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_25) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_24 ![sketch_2025_07_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_24/sketch_2025_07_24.png) [sketch_2025_07_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_24) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_23 ![sketch_2025_07_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_23/sketch_2025_07_23.gif) [sketch_2025_07_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_23) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_22 ![sketch_2025_07_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_22/sketch_2025_07_22.gif) [sketch_2025_07_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_22) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_21 ![sketch_2025_07_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_21/sketch_2025_07_21.gif) [sketch_2025_07_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_21) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_20 ![sketch_2025_07_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_20/sketch_2025_07_20.gif) [sketch_2025_07_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_20) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_19 ![sketch_2025_07_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_19/sketch_2025_07_19.gif) [sketch_2025_07_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_19) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_18 ![sketch_2025_07_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_18/sketch_2025_07_18.gif) [sketch_2025_07_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_18) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_17 ![sketch_2025_07_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_17/sketch_2025_07_17.gif) [sketch_2025_07_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_17) [[py5](https://py5coding.org/)] #truchet --- ### sketch_2025_07_16 ![sketch_2025_07_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_16/sketch_2025_07_16.gif) [sketch_2025_07_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_16) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_15 ![sketch_2025_07_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_15/sketch_2025_07_15.png) [sketch_2025_07_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_15) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_14 ![sketch_2025_07_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_14/sketch_2025_07_14.png) [sketch_2025_07_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_14) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_13 ![sketch_2025_07_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_13/sketch_2025_07_13.png) [sketch_2025_07_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_13) [Folium] A small #Folium example. --- ### sketch_2025_07_12 ![sketch_2025_07_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_12/sketch_2025_07_12.png) [sketch_2025_07_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_12) [[py5](https://py5coding.org/)] #QueasyCam --- ### sketch_2025_07_11 ![sketch_2025_07_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_11/sketch_2025_07_11.png) [sketch_2025_07_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_11) [[ursina](https://www.ursinaengine.org/)] Eperimenting with #UrsinaEngine --- ### sketch_2025_07_10 ![sketch_2025_07_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_10/sketch_2025_07_10.gif) [sketch_2025_07_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_10) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_09 ![sketch_2025_07_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_09/sketch_2025_07_09.gif) [sketch_2025_07_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_09) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_08 ![sketch_2025_07_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_08/sketch_2025_07_08.gif) [sketch_2025_07_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_08) [[py5](https://py5coding.org/)] #trimesh #OpenSimplexNoise --- ### sketch_2025_07_07 ![sketch_2025_07_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_07/sketch_2025_07_07.gif) [sketch_2025_07_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_07) [[py5](https://py5coding.org/)] #trimesh --- ### sketch_2025_07_06 ![sketch_2025_07_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_06/sketch_2025_07_06.gif) [sketch_2025_07_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_06) [[py5](https://py5coding.org/)] Finally I made an arbitrary #trimesh "slab" I've been unsuccessfully thinking about doing for a while... --- ### sketch_2025_07_05 ![sketch_2025_07_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_05/sketch_2025_07_05.gif) [sketch_2025_07_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_05) [[py5](https://py5coding.org/)] I hate to calculate the index of vertices on an array for constructiong faces. So I ended up trying a dictionary with the indices... let's see if this helps with my trimesh studies. --- ### sketch_2025_07_04 ![sketch_2025_07_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_04/sketch_2025_07_04.png) [sketch_2025_07_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_04) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_03 ![sketch_2025_07_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_03/sketch_2025_07_03.png) [sketch_2025_07_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_03) [[py5](https://py5coding.org/)] --- ### sketch_2025_07_02 ![sketch_2025_07_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_02/sketch_2025_07_02.png) [sketch_2025_07_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_02) [[py5](https://py5coding.org/)] Revisiting a 2018 sketch I like a lot... I should work on this a bit. --- ### sketch_2025_07_01 ![sketch_2025_07_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_07_01/sketch_2025_07_01.png) [sketch_2025_07_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_07_01) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_30 ![sketch_2025_06_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_30/sketch_2025_06_30.gif) [sketch_2025_06_30](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_30) [[py5](https://py5coding.org/)] #AlanTuring #TuringPride #Pride --- ### sketch_2025_06_29 ![sketch_2025_06_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_29/sketch_2025_06_29.png) [sketch_2025_06_29](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_29) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_28 ![sketch_2025_06_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_28/sketch_2025_06_28.png) [sketch_2025_06_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_28) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_27 ![sketch_2025_06_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_27/sketch_2025_06_27.png) [sketch_2025_06_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_27) [Blender Geometry Nodes] --- ### sketch_2025_06_26 ![sketch_2025_06_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_26/sketch_2025_06_26.gif) [sketch_2025_06_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_26) [[py5](https://py5coding.org/)] Back to the #numpy based #flocking experiment based on Nicolas Rougier example in "From Pytnon to Numpy" --- ### sketch_2025_06_25 ![sketch_2025_06_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_25/sketch_2025_06_25.png) [sketch_2025_06_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_25) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_24 ![sketch_2025_06_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_24/sketch_2025_06_24.png) [sketch_2025_06_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_24) [[FreeCAD](https://freecadweb.org)] #FreeCAD example made during a class --- ### sketch_2025_06_23 ![sketch_2025_06_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_23/sketch_2025_06_23.png) [sketch_2025_06_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_23) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_22 ![sketch_2025_06_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_22/sketch_2025_06_22.png) [sketch_2025_06_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_22) [[py5](https://py5coding.org/)] Not very good WIP... I always struggle to make #trimesh 3D meshes from scratch with #numpy --- ### sketch_2025_06_21 ![sketch_2025_06_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_21/sketch_2025_06_21.gif) [sketch_2025_06_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_21) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_20 ![sketch_2025_06_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_20/sketch_2025_06_20.gif) [sketch_2025_06_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_20) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_19 ![sketch_2025_06_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_19/sketch_2025_06_19.png) [sketch_2025_06_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_19) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_18 ![sketch_2025_06_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_18/sketch_2025_06_18.gif) [sketch_2025_06_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_18) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_17 ![sketch_2025_06_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_17/sketch_2025_06_17.png) [sketch_2025_06_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_17) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_16 ![sketch_2025_06_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_16/sketch_2025_06_16.gif) [sketch_2025_06_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_16) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_15 ![sketch_2025_06_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_15/sketch_2025_06_15.gif) [sketch_2025_06_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_15) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_14 ![sketch_2025_06_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_14/sketch_2025_06_14.gif) [sketch_2025_06_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_14) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_13 ![sketch_2025_06_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_13/sketch_2025_06_13.png) [sketch_2025_06_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_13) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_12 ![sketch_2025_06_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_12/sketch_2025_06_12.gif) [sketch_2025_06_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_12) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_11 ![sketch_2025_06_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_11/sketch_2025_06_11.gif) [sketch_2025_06_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_11) [[py5](https://py5coding.org/)] #shapely #trimesh --- ### sketch_2025_06_10 ![sketch_2025_06_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_10/sketch_2025_06_10.png) [sketch_2025_06_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_10) [[py5](https://py5coding.org/)] A #trimesh example used in class yesterday! --- ### sketch_2025_06_09 ![sketch_2025_06_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_09/sketch_2025_06_09.png) [sketch_2025_06_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_09) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_08 ![sketch_2025_06_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_08/sketch_2025_06_08.gif) [sketch_2025_06_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_08) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_07 ![sketch_2025_06_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_07/sketch_2025_06_07.png) [sketch_2025_06_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_07) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_06 ![sketch_2025_06_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_06/sketch_2025_06_06.png) [sketch_2025_06_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_06) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_05 ![sketch_2025_06_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_05/sketch_2025_06_05.jpg) [sketch_2025_06_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_05) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_04 ![sketch_2025_06_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_04/sketch_2025_06_04.png) [sketch_2025_06_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_04) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_03 ![sketch_2025_06_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_03/sketch_2025_06_03.png) [sketch_2025_06_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_03) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_02 ![sketch_2025_06_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_02/sketch_2025_06_02.png) [sketch_2025_06_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_02) [[py5](https://py5coding.org/)] --- ### sketch_2025_06_01 ![sketch_2025_06_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_06_01/sketch_2025_06_01.gif) [sketch_2025_06_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_06_01) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_31 ![sketch_2025_05_31](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_31/sketch_2025_05_31.gif) [sketch_2025_05_31](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_31) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_30 ![sketch_2025_05_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_30/sketch_2025_05_30.gif) [sketch_2025_05_30](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_30) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_29 ![sketch_2025_05_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_29/sketch_2025_05_29.gif) [sketch_2025_05_29](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_29) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_28 ![sketch_2025_05_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_28/sketch_2025_05_28.png) [sketch_2025_05_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_28) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_27 ![sketch_2025_05_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_27/sketch_2025_05_27.gif) [sketch_2025_05_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_27) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_26 ![sketch_2025_05_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_26/sketch_2025_05_26.gif) [sketch_2025_05_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_26) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_25 ![sketch_2025_05_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_25/sketch_2025_05_25.gif) [sketch_2025_05_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_25) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_24 ![sketch_2025_05_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_24/sketch_2025_05_24.gif) [sketch_2025_05_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_24) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_23 ![sketch_2025_05_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_23/sketch_2025_05_23.gif) [sketch_2025_05_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_23) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_22 ![sketch_2025_05_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_22/sketch_2025_05_22.png) [sketch_2025_05_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_22) [[py5](https://py5coding.org/)] WIP --- ### sketch_2025_05_21 ![sketch_2025_05_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_21/sketch_2025_05_21.gif) [sketch_2025_05_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_21) [[py5](https://py5coding.org/)] WIP: reviewing my geometry helpers. Hatch polygon seems... broken. --- ### sketch_2025_05_20 ![sketch_2025_05_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_20/sketch_2025_05_20.gif) [sketch_2025_05_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_20) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_19 ![sketch_2025_05_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_19/sketch_2025_05_19.gif) [sketch_2025_05_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_19) [[py5](https://py5coding.org/)] Ome more PeasyCam + mouse selection --- ### sketch_2025_05_18 ![sketch_2025_05_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_18/sketch_2025_05_18.gif) [sketch_2025_05_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_18) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_17 ![sketch_2025_05_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_17/sketch_2025_05_17.gif) [sketch_2025_05_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_17) [[py5](https://py5coding.org/)] Zoom, pan and *slick* 3D orbit mouse interaction with insane ease, basically for free, with the PeasyCam library. --- ### sketch_2025_05_16 ![sketch_2025_05_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_16/sketch_2025_05_16.gif) [sketch_2025_05_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_16) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_15 ![sketch_2025_05_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_15/sketch_2025_05_15.png) [sketch_2025_05_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_15) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_14 ![sketch_2025_05_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_14/sketch_2025_05_14.svg) [sketch_2025_05_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_14) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_13 ![sketch_2025_05_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_13/sketch_2025_05_13.png) [sketch_2025_05_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_13) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_12 ![sketch_2025_05_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_12/sketch_2025_05_12.gif) [sketch_2025_05_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_12) [[py5](https://py5coding.org/)] One more "snub square tiling" #loop #animation :) --- ### sketch_2025_05_11 ![sketch_2025_05_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_11/sketch_2025_05_11.gif) [sketch_2025_05_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_11) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_10 ![sketch_2025_05_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_10/sketch_2025_05_10.png) [sketch_2025_05_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_10) [[py5](https://py5coding.org/)] "snub square tiling" --- ### sketch_2025_05_09 ![sketch_2025_05_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_09/sketch_2025_05_09.png) [sketch_2025_05_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_09) [[py5](https://py5coding.org/)] Work in progress on the "snub square tiling" --- ### sketch_2025_05_08 ![sketch_2025_05_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_08/sketch_2025_05_08.gif) [sketch_2025_05_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_08) [[py5](https://py5coding.org/)] Another take at animating "Cairo tiles" which I tried not long ago (actually in 2023...). --- ### sketch_2025_05_07 ![sketch_2025_05_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_07/sketch_2025_05_07.png) [sketch_2025_05_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_07) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_06 ![sketch_2025_05_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_06/sketch_2025_05_06.png) [sketch_2025_05_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_06) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_05 ![sketch_2025_05_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_05/sketch_2025_05_05.png) [sketch_2025_05_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_05) [[py5](https://py5coding.org/)] Data from #geobr --- ### sketch_2025_05_04 ![sketch_2025_05_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_04/sketch_2025_05_04.png) [sketch_2025_05_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_04) [[py5](https://py5coding.org/)] Still the Marius Watz inspitation... [check the animated version](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_04/out.gif) --- ### sketch_2025_05_03 ![sketch_2025_05_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_03/sketch_2025_05_03.png) [sketch_2025_05_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_03) [[py5](https://py5coding.org/)] heavily inspired by Marius Watz's work I posted recently, from the Processing examples... --- ### sketch_2025_05_02 ![sketch_2025_05_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_02/sketch_2025_05_02.png) [sketch_2025_05_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_02) [[py5](https://py5coding.org/)] --- ### sketch_2025_05_01 ![sketch_2025_05_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_05_01/sketch_2025_05_01.png) [sketch_2025_05_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_05_01) [[py5](https://py5coding.org/)] I needed to make the bodies KINEMATIC... It was a long time since I tried this I had forgoten all about the these. --- ### sketch_2025_04_30 ![sketch_2025_04_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_30/sketch_2025_04_30.png) [sketch_2025_04_30](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_30) [[py5](https://py5coding.org/)] Broken! Maybe something in pymunk changed, I have to investigate! (I rotated the box bodies, the shapes are drawn rotated, but the geometry for the collisions seems not to be rotated...) --- ### sketch_2025_04_29 ![sketch_2025_04_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_29/sketch_2025_04_29.png) [sketch_2025_04_29](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_29) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_28 ![sketch_2025_04_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_28/sketch_2025_04_28.png) [sketch_2025_04_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_28) [[py5](https://py5coding.org/)] A small Pymunk example for class. No interactive segment-wall drawing for this one. And I can't use pickle for this sketch in imported mode :( (see previous day for both features and the triangulated polys!) --- ### sketch_2025_04_27 ![sketch_2025_04_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_27/sketch_2025_04_27.gif) [sketch_2025_04_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_27) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_26 ![sketch_2025_04_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_26/sketch_2025_04_26.gif) [sketch_2025_04_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_26) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_25 ![sketch_2025_04_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_25/sketch_2025_04_25.png) [sketch_2025_04_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_25) [[py5](https://py5coding.org/)] WIP --- ### sketch_2025_04_24 ![sketch_2025_04_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_24/sketch_2025_04_24.png) [sketch_2025_04_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_24) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_23 ![sketch_2025_04_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_23/sketch_2025_04_23.gif) [sketch_2025_04_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_23) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_22 ![sketch_2025_04_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_22/sketch_2025_04_22.png) [sketch_2025_04_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_22) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_21 ![sketch_2025_04_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_21/sketch_2025_04_21.gif) [sketch_2025_04_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_21) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_20 ![sketch_2025_04_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_20/sketch_2025_04_20.png) [sketch_2025_04_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_20) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_19 ![sketch_2025_04_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_19/sketch_2025_04_19.gif) [sketch_2025_04_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_19) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_18 ![sketch_2025_04_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_18/sketch_2025_04_18.png) [sketch_2025_04_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_18) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_17 ![sketch_2025_04_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_17/sketch_2025_04_17.png) [sketch_2025_04_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_17) [[py5](https://py5coding.org/)] Yet another GOL... --- ### sketch_2025_04_16 ![sketch_2025_04_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_16/sketch_2025_04_16.png) [sketch_2025_04_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_16) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_15 ![sketch_2025_04_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_15/sketch_2025_04_15.png) [sketch_2025_04_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_15) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_14 ![sketch_2025_04_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_14/sketch_2025_04_14.png) [sketch_2025_04_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_14) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_13 ![sketch_2025_04_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_13/sketch_2025_04_13.png) [sketch_2025_04_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_13) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_12 ![sketch_2025_04_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_12/sketch_2025_04_12.gif) [sketch_2025_04_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_12) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_11 ![sketch_2025_04_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_11/sketch_2025_04_11.png) [sketch_2025_04_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_11) [[leafmap](https://leafmap.org/)] --- ### sketch_2025_04_10 ![sketch_2025_04_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_10/sketch_2025_04_10.png) [sketch_2025_04_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_10) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_09 ![sketch_2025_04_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_09/sketch_2025_04_09.png) [sketch_2025_04_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_09) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_08 ![sketch_2025_04_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_08/sketch_2025_04_08.png) [sketch_2025_04_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_08) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_07 ![sketch_2025_04_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_07/sketch_2025_04_07.png) [sketch_2025_04_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_07) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_06 ![sketch_2025_04_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_06/sketch_2025_04_06.png) [sketch_2025_04_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_06) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_05 ![sketch_2025_04_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_05/sketch_2025_04_05.gif) [sketch_2025_04_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_05) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_04 ![sketch_2025_04_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_04/sketch_2025_04_04.jpg) [sketch_2025_04_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_04) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_03 ![sketch_2025_04_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_03/sketch_2025_04_03.png) [sketch_2025_04_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_03) [[py5](https://py5coding.org/)] --- ### sketch_2025_04_02 ![sketch_2025_04_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_02/sketch_2025_04_02.png) [sketch_2025_04_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_02) [[py5](https://py5coding.org/)] #LSystem --- ### sketch_2025_04_01 ![sketch_2025_04_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_04_01/sketch_2025_04_01.png) [sketch_2025_04_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_04_01) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_31 ![sketch_2025_03_31](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_31/sketch_2025_03_31.png) [sketch_2025_03_31](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_31) [[py5](https://py5coding.org/)] Done during class. --- ### sketch_2025_03_30 ![sketch_2025_03_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_30/sketch_2025_03_30.png) [sketch_2025_03_30](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_30) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_29 ![sketch_2025_03_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_29/sketch_2025_03_29.gif) [sketch_2025_03_29](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_29) [[py5](https://py5coding.org/)] Trying to adapt an awesome zoom strategy from my dear friend @Introscopia@coletivos.org --- ### sketch_2025_03_28 ![sketch_2025_03_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_28/sketch_2025_03_28.gif) [sketch_2025_03_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_28) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_27 ![sketch_2025_03_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_27/sketch_2025_03_27.gif) [sketch_2025_03_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_27) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_26 ![sketch_2025_03_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_26/sketch_2025_03_26.png) [sketch_2025_03_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_26) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_25 ![sketch_2025_03_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_25/sketch_2025_03_25.png) [sketch_2025_03_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_25) [[py5](https://py5coding.org/)] Astronaut Eileen Collins --- ### sketch_2025_03_24 ![sketch_2025_03_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_24/sketch_2025_03_24.png) [sketch_2025_03_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_24) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_23 ![sketch_2025_03_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_23/sketch_2025_03_23.gif) [sketch_2025_03_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_23) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_22 ![sketch_2025_03_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_22/sketch_2025_03_22.png) [sketch_2025_03_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_22) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_21 ![sketch_2025_03_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_21/sketch_2025_03_21.png) [sketch_2025_03_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_21) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_20 ![sketch_2025_03_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_20/sketch_2025_03_20.gif) [sketch_2025_03_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_20) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_19 ![sketch_2025_03_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_19/sketch_2025_03_19.gif) [sketch_2025_03_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_19) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_18 ![sketch_2025_03_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_18/sketch_2025_03_18.gif) [sketch_2025_03_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_18) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_17 ![sketch_2025_03_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_17/sketch_2025_03_17.png) [sketch_2025_03_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_17) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_16 ![sketch_2025_03_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_16/sketch_2025_03_16.gif) [sketch_2025_03_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_16) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_15 ![sketch_2025_03_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_15/sketch_2025_03_15.gif) [sketch_2025_03_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_15) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_14 ![sketch_2025_03_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_14/sketch_2025_03_14.png) [sketch_2025_03_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_14) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_13 ![sketch_2025_03_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_13/sketch_2025_03_13.png) [sketch_2025_03_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_13) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_12 ![sketch_2025_03_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_12/sketch_2025_03_12.png) [sketch_2025_03_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_12) [[py5](https://py5coding.org/)] Work in progress... #OpenStreetMap data as usual #osmnx --- ### sketch_2025_03_11 ![sketch_2025_03_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_11/sketch_2025_03_11.gif) [sketch_2025_03_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_11) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_10 ![sketch_2025_03_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_10/sketch_2025_03_10.png) [sketch_2025_03_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_10) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_09 ![sketch_2025_03_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_09/sketch_2025_03_09.png) [sketch_2025_03_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_09) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_08 ![sketch_2025_03_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_08/sketch_2025_03_08.png) [sketch_2025_03_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_08) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_07 ![sketch_2025_03_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_07/sketch_2025_03_07.png) [sketch_2025_03_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_07) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_06 ![sketch_2025_03_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_06/sketch_2025_03_06.png) [sketch_2025_03_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_06) [[py5](https://py5coding.org/)] Collage from "Mercado Municipal (São Paulo)" by Wilfredo Rafael Rodriguez Hernandez (Wilfredor) https://commons.wikimedia.org/wiki/File:Mercado_Municipal_(S%C3%A3o_Paulo)_16.jpg Creative Commons Attribution-Share Alike 4.0 International license. --- ### sketch_2025_03_05 ![sketch_2025_03_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_05/sketch_2025_03_05.png) [sketch_2025_03_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_05) [[py5](https://py5coding.org/)] Demo of raster clipping/masking with #py5 and #numpy. --- ### sketch_2025_03_04 ![sketch_2025_03_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_04/sketch_2025_03_04.gif) [sketch_2025_03_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_04) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_03 ![sketch_2025_03_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_03/sketch_2025_03_03.gif) [sketch_2025_03_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_03) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_02 ![sketch_2025_03_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_02/sketch_2025_03_02.gif) [sketch_2025_03_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_02) [[py5](https://py5coding.org/)] --- ### sketch_2025_03_01 ![sketch_2025_03_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_03_01/sketch_2025_03_01.gif) [sketch_2025_03_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_03_01) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_28 ![sketch_2025_02_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_28/sketch_2025_02_28.gif) [sketch_2025_02_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_28) [[py5](https://py5coding.org/)] Domingo vai ter oficina de GIFs animados no Garoa... [versão maior da animação](sketch_2025_02_28_maior.gif) --- ### sketch_2025_02_27 ![sketch_2025_02_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_27/sketch_2025_02_27.png) [sketch_2025_02_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_27) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_26 ![sketch_2025_02_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_26/sketch_2025_02_26.png) [sketch_2025_02_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_26) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_25 ![sketch_2025_02_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_25/sketch_2025_02_25.png) [sketch_2025_02_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_25) [[py5](https://py5coding.org/)] Adding basic zoom and pan --- ### sketch_2025_02_24 ![sketch_2025_02_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_24/sketch_2025_02_24.png) [sketch_2025_02_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_24) [[py5](https://py5coding.org/)] Poly data (c) OpenStreetMap contributors https://www.openstreetmap.org/copyright --- ### sketch_2025_02_23 ![sketch_2025_02_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_23/sketch_2025_02_23.png) [sketch_2025_02_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_23) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_22 ![sketch_2025_02_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_22/sketch_2025_02_22.png) [sketch_2025_02_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_22) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_21 ![sketch_2025_02_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_21/sketch_2025_02_21.png) [sketch_2025_02_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_21) [matplotlib] --- ### sketch_2025_02_20 ![sketch_2025_02_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_20/sketch_2025_02_20.gif) [sketch_2025_02_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_20) [[py5](https://py5coding.org/)] #ControlP5 example. This is a Processing Java library, but it can be used with py5 :) --- ### sketch_2025_02_19 ![sketch_2025_02_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_19/sketch_2025_02_19.gif) [sketch_2025_02_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_19) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_18 ![sketch_2025_02_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_18/sketch_2025_02_18.gif) [sketch_2025_02_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_18) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_17 ![sketch_2025_02_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_17/sketch_2025_02_17.gif) [sketch_2025_02_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_17) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_16 ![sketch_2025_02_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_16/sketch_2025_02_16.gif) [sketch_2025_02_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_16) [[py5](https://py5coding.org/)] #DelaunayTriangulations and #TravelingSalesmanProblem investigations with #SciPy can be in 3D too :) --- ### sketch_2025_02_15 ![sketch_2025_02_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_15/sketch_2025_02_15.png) [sketch_2025_02_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_15) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_14 ![sketch_2025_02_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_14/sketch_2025_02_14.gif) [sketch_2025_02_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_14) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_13 ![sketch_2025_02_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_13/sketch_2025_02_13.gif) [sketch_2025_02_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_13) [[py5](https://py5coding.org/)] #SciPy.spatial #ConvexHull and #MinimalSpanningTree --- ### sketch_2025_02_12 ![sketch_2025_02_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_12/sketch_2025_02_12.png) [sketch_2025_02_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_12) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_11 ![sketch_2025_02_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_11/sketch_2025_02_11.gif) [sketch_2025_02_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_11) [[py5](https://py5coding.org/)] #TravellingSalesmanProblem #MinimalSpanningTree #SciPy #graphs --- ### sketch_2025_02_10 ![sketch_2025_02_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_10/sketch_2025_02_10.gif) [sketch_2025_02_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_10) [[py5](https://py5coding.org/)] Naive "nearest neighbor" #TravelingSalesmanProblem aproximation with just #scipy, fast but crude. Maybe tomorrow I'll try to implement something from a scientific paper on the problem, or maybe a naive genetic algorithm just for fun. --- ### sketch_2025_02_09 ![sketch_2025_02_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_09/sketch_2025_02_09.gif) [sketch_2025_02_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_09) [[py5](https://py5coding.org/)] #networkx #TSP approximation --- ### sketch_2025_02_08 ![sketch_2025_02_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_08/sketch_2025_02_08.gif) [sketch_2025_02_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_08) [[py5](https://py5coding.org/)] #MinimalSpanningTree #networkx --- ### sketch_2025_02_07 ![sketch_2025_02_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_07/sketch_2025_02_07.gif) [sketch_2025_02_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_07) [[py5](https://py5coding.org/)] #networkx #MinimumSpanningTree --- ### sketch_2025_02_06 ![sketch_2025_02_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_06/sketch_2025_02_06.gif) [sketch_2025_02_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_06) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_05 ![sketch_2025_02_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_05/sketch_2025_02_05.png) [sketch_2025_02_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_05) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_04 ![sketch_2025_02_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_04/sketch_2025_02_04.png) [sketch_2025_02_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_04) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_03 ![sketch_2025_02_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_03/sketch_2025_02_03.png) [sketch_2025_02_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_03) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_02 ![sketch_2025_02_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_02/sketch_2025_02_02.png) [sketch_2025_02_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_02) [[py5](https://py5coding.org/)] --- ### sketch_2025_02_01 ![sketch_2025_02_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_02_01/sketch_2025_02_01.png) [sketch_2025_02_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_02_01) [[py5](https://py5coding.org/)] Another #PixelSorting experiment I didn't heve the energy to try yesterday, also from an earlier #OSNoise sketch idea + #NumPy. --- ### sketch_2025_01_31 ![sketch_2025_01_31](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_31/sketch_2025_01_31.gif) [sketch_2025_01_31](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_31) [[py5](https://py5coding.org/)] Using #numpy.sort on a variation of the previous sketch, animating a few frames, but the color compression is brutal :( --- ### sketch_2025_01_30 ![sketch_2025_01_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_30/sketch_2025_01_30.png) [sketch_2025_01_30](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_30) [[py5](https://py5coding.org/)] --- ### sketch_2025_01_29 ![sketch_2025_01_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_29/sketch_2025_01_29.png) [sketch_2025_01_29](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_29) [[py5](https://py5coding.org/)] [animated screen capture](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_29/sketch_2025_01_29.mp4) --- ### sketch_2025_01_28 ![sketch_2025_01_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_28/sketch_2025_01_28.png) [sketch_2025_01_28](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_28) [[py5](https://py5coding.org/)] [animated screen capture](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_28/sketch_2025_01_28.mp4) Interactive OpenSimplexNoise based "infinite scroll" #genuary28 #genuary2025 ### sketch_2025_01_27 ![sketch_2025_01_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_27/sketch_2025_01_27.png) [sketch_2025_01_27](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_27) [[py5](https://py5coding.org/)] --- ### sketch_2025_01_26 ![sketch_2025_01_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_26/sketch_2025_01_26.gif) [sketch_2025_01_26](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_26) [[py5](https://py5coding.org/)] --- ### sketch_2025_01_25 ![sketch_2025_01_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_25/sketch_2025_01_25.gif) [sketch_2025_01_25](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_25) [[py5](https://py5coding.org/)] --- ### sketch_2025_01_24 ![sketch_2025_01_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_24/sketch_2025_01_24.png) [sketch_2025_01_24](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_24) [p5js] I'm too sad to make my own #genuary sketch because of news of [Vamoss](https://openprocessing.org/user/65884) passing away. I decided to just tweak one of his openprocessing sketches, he loved that people could work on top of his code. We will miss him so much. His inspiring energy will live on. --- ### sketch_2025_01_23 ![sketch_2025_01_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_23/sketch_2025_01_23.gif) [sketch_2025_01_23](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_23) [[py5](https://py5coding.org/)] --- ### sketch_2025_01_22 ![sketch_2025_01_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_22/sketch_2025_01_22.png) [animation](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_22/sketch_2025_01_22.mp4) [sketch_2025_01_22](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_22) [[py5](https://py5coding.org/)] --- ### sketch_2025_01_21 ![sketch_2025_01_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_21/sketch_2025_01_21.gif) [sketch_2025_01_21](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_21) [[py5](https://py5coding.org/)] #genuary21 ### sketch_2025_01_20 ![sketch_2025_01_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_20/sketch_2025_01_20.gif) [sketch_2025_01_20](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_20) [[py5](https://py5coding.org/)] #genuary20 ### sketch_2025_01_19 ![sketch_2025_01_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_19/sketch_2025_01_19.gif) [sketch_2025_01_19](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_19) [[py5](https://py5coding.org/)] #genuary2025 #genuary19 Homage to Jesús Soto. --- ### sketch_2025_01_18 ![sketch_2025_01_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_18/sketch_2025_01_18.gif) [sketch_2025_01_18](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_18) [[py5](https://py5coding.org/)] A lazy rehash of a PyMunk sketch --- ### sketch_2025_01_17 ![sketch_2025_01_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_17/sketch_2025_01_17.gif) [sketch_2025_01_17](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_17) [[py5](https://py5coding.org/)] #genuary2025 #genuary17 --- ### sketch_2025_01_16 ![sketch_2025_01_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_16/sketch_2025_01_16.gif) [sketch_2025_01_16](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_16) [[py5](https://py5coding.org/)] --- ### sketch_2025_01_15 ![sketch_2025_01_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_15/sketch_2025_01_15.png) [sketch_2025_01_15](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_15) [[py5](https://py5coding.org/)] #genuary2025 #genuary15 --- ### sketch_2025_01_14 ![sketch_2025_01_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_14/sketch_2025_01_14.png) [sketch_2025_01_14](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_14) [[py5](https://py5coding.org/)] #genuary2025 #genurary14 --- ### sketch_2025_01_13 ![sketch_2025_01_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_13/sketch_2025_01_13.png) [sketch_2025_01_13](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_13) [[py5](https://py5coding.org/)] --- ### sketch_2025_01_12 ![sketch_2025_01_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_12/sketch_2025_01_12.png) [sketch_2025_01_12](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_12) [[py5](https://py5coding.org/)] #genuary2025 #genuary12 --- ### sketch_2025_01_11 ![sketch_2025_01_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_11/sketch_2025_01_11.png) [sketch_2025_01_11](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_11) [[py5](https://py5coding.org/)] #Wolfram #genuary2025 #genuary11 I wanted to optimize with NumPy but couldn't do much, the drawing part needs more work... --- ### sketch_2025_01_10 ![sketch_2025_01_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_10/sketch_2025_01_10.png) [sketch_2025_01_10](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_10) [[py5](https://py5coding.org/)] #genuary2025 #genuary10 Tau is the only number contant... (based on genuary 8) --- ### sketch_2025_01_09 ![sketch_2025_01_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_09/sketch_2025_01_09.png) [sketch_2025_01_09](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_09) [[py5](https://py5coding.org/)] I'd love to see Wolfram's "rule 30" on my bus seats! #genuary9 #genuary2025 --- ### sketch_2025_01_08 ![sketch_2025_01_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_08/sketch_2025_01_08.png) [sketch_2025_01_08](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_08) [[py5](https://py5coding.org/)] 4000 white points randomly selected from the volume of a sphere, rotated over the Y axis and redrawn 250 times. #genuary2025 #genuary8 --- ### sketch_2025_01_07 ![sketch_2025_01_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_07/sketch_2025_01_07.png) [sketch_2025_01_07](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_07) [python] #pyautogui #LibreOffice --- ### sketch_2025_01_06 ![sketch_2025_01_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_06/sketch_2025_01_06.png) [sketch_2025_01_06](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_06) [[py5](https://py5coding.org/)] --- ### sketch_2025_01_05 ![sketch_2025_01_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_05/sketch_2025_01_05.gif) [animation](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_05/out.gif) [sketch_2025_01_05](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_05) [[py5](https://py5coding.org/)] --- ### sketch_2025_01_04 ![sketch_2025_01_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_04/sketch_2025_01_04.png) [sketch_2025_01_04](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_04) [[py5](https://py5coding.org/)] --- ### sketch_2025_01_03 ![sketch_2025_01_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_03/sketch_2025_01_03.png) The next day I think I improved it: ![sketch_2025_01_03b](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_03/sketch_2025_01_03b.png) [sketch_2025_01_03](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_03) [[py5](https://py5coding.org/)] #genuary3 #genuary2025 "42 lines of code" --- ### sketch_2025_01_02 ![sketch_2025_01_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_02/sketch_2025_01_02.png) [sketch_2025_01_02](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_02) [[py5](https://py5coding.org/)] #genuary2 #genuary2025 layers and layers. --- ### sketch_2025_01_01 ![sketch_2025_01_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2025/sketch_2025_01_01/sketch_2025_01_01.gif) [sketch_2025_01_01](https://github.com/villares/sketch-a-day/tree/main/2025/sketch_2025_01_01) [[py5](https://py5coding.org/)] --- [2026](README.md) \| 2025 \| [2024](2024.md) \| [2023](2023.md) \| [2022](2022.md) \| [2021](2021.md) \| [2020](2020.md) \| [2019](2019.md) \| [2018](2018.md) ---

The sketch-a-day project, images and code repository, by Alexandre B A Villares are licensed under Attribution-NonCommercial-NoDerivatives 4.0 International , except if marked/attributed otherwise in a file or code section. Please contact for licensing questions.