Hacker News new | past | comments | ask | show | jobs | submit login
Desmos 3D graphing calculator (desmos.com)
449 points by benpm on Oct 12, 2023 | hide | past | favorite | 83 comments



There are a bunch of YouTubers making Desmos animations. I haven’t played with it myself, but always find it fascinating with what people come up with.

https://youtu.be/4_8eY_Ij-5k


This is like a new generation of demos, and I'm equally impressed and humbled by the creations.

Explanation of the above video: https://www.youtube.com/watch?v=6tBkJhmpfFc


and here I was having fun spinning the camera around with `xy`...comments section once again delivers.


Here is a series of videos about making a game on desmos!

https://www.youtube.com/watch?v=XvS_yBj-nDM&list=PL2lqjYK9wC...


Well it passes the sin(x)sin(y)sin(z)>0.1 test

Edit: also sin(x)sin(y)sin(z)+0.1sin(10x)sin(10y)sin(10z)>0.1

https://www.desmos.com/3d/85d41ad6c6


ENH: desmos [3d]: Support complex exponents; with i and/or a complex() function

Test equations for geogebra:

    equation -- what I think it looks like
    xi^2 -- Integer coordinate grid
    e^xπi -- Unit circle with another little circle also about the origin (0,0)
    e^(πi^x) -- crash / not responding: a(x)=e^(πi^(x))
                though it seems to work with x in Z+
    e**(x*pi*I)

    e^(x π i^π) -- somewhat scale-invariant interposed spirals around a single point attractor. (Zoom in/out)
Only SageMath preprocesses Python to replace XOR (^) with exp() or **, so:

  f(x) = x^2
  g(x) = x**2  # Python
  h(x) = exp(x, 2)
  x**2         # SymPy Gamma, Beta

  x**math.pi   # Python: 3.141592653589793
  x**pi        # SymPy: π

  x**1j        # Python
  x**I         # SymPy

  x**(1+I)    # BUG/ENH: Plot complex expressions with SymPy

  import sympy as sy
  display(sy.E, sy.I, sy.pi)
  from sympy import E, pi, I
  x,y = sy.symbols('x,y', real=True); display(x,y)
  eq01 = sy.Eq(y, E**(x*pi*I)); display(eq01)
  eq02 = sy.Rel(y, E**(x*pi*I), '=='); display(eq02)
  func01 = sy.Function('f')(E**(x*pi*I)); display(func01)
  func02 = sy.Function('f')(eq02.rhs); display(func02)
  assert eq01 == eq01
  assert func01 == func02

  import unittest
  test = unittest.TestCase()
  test.assertEqual(eq01, eq02)
  test.assertEqual(func01, func02)
Sympy Gamma: https://gamma.sympy.org/

Sympy Beta is SymPy Gamma compiled to WASM: https://github.com/eagleoflqj/sympy_beta

What methods for visualizing complex coordinate(s) are helpful? You can map the complex coordinate into e.g. the z-axis; or is complex phase - as is necessary to model [qubit] wave functions psi - just another high-dimensional dimension to also visualize?


What is the nature of the test? Is this something that plotters are notoriously prone to misrendering? If so, then do they do so in any predictable way?


My phone gets pretty warm when I zoom out but the UI remains nice and responsive …


the actual rendering code is ran using a webworker in a separate thread


Thank you to whomever thought about gimbal lock when designing the rotate controls.


We're all Quaternionerds now.


If you appreciate quaternions for what they can do for you, but also find them frustratingly unintuitive/ugly, then you may be interested in bivectors (https://bivector.net/) and geometric algebra more broadly. They're equivalent in power, but suddenly everything actually makes sense!


You're welcome


Well, dang. I remember you from the very late 1980s at Stanford. Never met you but saw you on the timesharing systems of the time. A few years later I enjoyed a talk you gave at IBM Yorktown Heights about how you sneaked into Apple to build the graphing calculator.


Well howdy, old-timer! That brings back some memories. (The '80s: after the dinosaurs, but before the giant armored sloths - back when neutrinos were massless and Λ was zero.)

Did you work on Axiom? That was the finest crafted computer algebra system.


No, I was in the physical sciences where we made our own glassware from sand, fire, and sweat. But we were happy in them days, though we was poor.


Woah - https://www.desmos.com/3d/9eb92bb6e2 - an implicit surface!


What in tarnation


This looks nice, and I could see using it in some cases when I teach 3D functions, especially for complex functions that require more accuracy. But when introducing 3D it's often nicer to have graphs that showing gridding rather than smooth curves. For most purposes I'll probably stick to CalcPlot3D. It also has some nice features for showing points and vectors on a function, doing contour plots, and a nice surface of revolution visualization.

https://c3d.libretexts.org/CalcPlot3D/index.html


Our math lab teacher in high school made us create a 2d functions representation on an infinite cartesian chart, with integrals and derivatives. Then I extended the program to print 3D functions with rotations and rainbow colours.

Was a great project in C#, since it all started with a dot on a canvas, and all the rest of things was composed extending the base objects.

(x^{2}+9/4y^{2}+z^{2}-1)^{3}-x^{2}z^{3}-9/(80)y^{2}z^{3}=0


Desmos is the best, free (as in cost) and easily accessible graphing calculator out there. I wish it was opensource though. I've even tried to make an alternative and it's really hard to match their functionality (or I'm just inexperienced). I hope an opensource alternative crops up.

Edit: Seems there has https://www.geogebra.org/


GeoGebra is the closest I know, at least when limiting to copyleft [or theoretically the SQLite model would be fine, but it's pretty unique in dependability and selflessness for open source projects not subject to copyleft] "middle/high school (constructive?) geometry & function graphing teaching aid" classroom-grade robustness: bored & curious children are somewhat creative in their play/"(ab)use" of teaching/classroom software: buggy/anti-intuitive software can't survive the combination of:

- bored curious children playing around, bright and capable curious children exploring (way) beyond what the teacher explained, - normal students just getting by with the topic and relying on the software to aid their subject matter comprehension, - and teachers trying to plan lessons around it where they have to rely on it not needing a tutorial because there wouldn't really be time for such in the curriculum schedule.


One of my favourite things about (desktop) Geogebra is its ability to export to tikz. Making complicated geometric shapes in a latex file can be done so easily with Geogebra. Perhaps not as elegant as Castel, but still quite nice.

https://castel.dev/post/lecture-notes-1/


Desmos does have a Github page, but unfortunately the main codebase is not public. Their API docs are well written, though, so it's really easy to embed Desmos into your site.

[^1]: https://github.com/desmosinc

[^2]: https://www.desmos.com/api/v1.8/docs/index.html


I've been using Geogebra since it was recommended to me by my high-school math teacher, what feels like almost a century ago.

It never disappointed!

Desmos looks like a solid spiritual successor, if it wasn't closed source.


Commercial usage og Geogebra needs a license.

https://www.geogebra.org/m/pR5DME5S#material/yumfrbjr

I don't understand how their license and the GPL can co-exist?


https://www.gnu.org/philosophy/selling.en.html: “we encourage people who redistribute free software to charge as much as they wish or can”

Also, the engine is GPL-licensed, but the installer isn’t. https://www.geogebra.org/license#FAQ:

“How is GeoGebra licensed?

We license the different component parts of GeoGebra differently depending on their origin (authorship) and depending on your intended use of GeoGebra (see also next question)

- the source code is licensed under the GNU General Public License to ensure consistency with the various other pieces of software and libraries which are used within the GeoGebra source code (for a complete list of which see: https://wiki.geogebra.org/en/Reference:Sources_For_Used_Libr...).

- the GeoGebra installers (for various platforms including Linux, Mac OS, Windows, Android, iOS) and our web services (including GeoGebra Materials platform) are made available under our own licensing terms which have been drafted by an experienced law firm. We allow you to use the installers and web services for non-commercial purposes only provided you acknowledge GeoGebra; and

- the GeoGebra language files are made available under a Creative Commons license, which allows non-commercial use of these files.

Thus, there are really many different licenses involved in the background.”

I also noticed that one of their non-free options allows you the use of their logo. IANAL, but I don’t think the GPL automatically allows you that.


Simple: don't accept outside contributions without a CLA. GPL doesn't ever restrict the copyright holder(s).


I've been using GeoGebra for years. I have tried Desmos twice but couldn't immediately spot the differences. What are the benefits of Desmos over GeoGebra?


Desmos has a far smoother UI. Geogebra will often convert equations into its own format after clicking away from the equation editor, and if you mistyped or want to change the structure you must erase and re-type the whole thing—for example, typing f(x) will convert the equation into its own format where you can't edit parameters or the function name. Desmos leaves your input as text, allowing you to change input at the character level. From my high school experience where both were used frequently, a lot of frustration was expressed with Geogebra where missing a parenthesis forced you to re-type the entire equation since it often assumed the bulk of your equation was a parameter, and there was no way to correct it.


> frustration was expressed with Geogebra where missing a parenthesis forced you to re-type the entire equation since it often assumed the bulk of your equation was a parameter, and there was no way to correct it.

I believe this may simply be a case of not knowing Geogebra well, or it's simply caused by differences in taste/being accustomed to a single user interface. In my experience, Geogebra offers the ability to edit the source of any object after selecting its settings. So it was just two clicks away.

This is Geogebra the Electron app, though, I think there's also a Web app and I think there was also a Java app some time before.


I haven't heard of GeoGebra before! Really cool. Thanks for pointing that out.


I just want to chime in on Geogebra. I used it (was more or less forced to) when teaching math in high school for about 12 years. It is great for guided exploration, but it is very buggy. I am confident many students must have lost points in their math exams because of some of those bugs.


Can someone here explain how this works?

I'm not sure how reliable it is, but here's[1] an old Reddit comment describing the method that Desmos (2D) uses. That method works in 3D, so maybe Desmos 3D uses it, too.

[1]: https://www.reddit.com/r/desmos/comments/qlhmbc


After playing a bit with it, it looks like some variant of the marching cubes algorithm, and it looks recursive, as expected. Same as your Reddit thread but in 3D.

There are most likely a bunch of optimizations, but I can't think of another way of doing it. There are raytracing/raymarching techniques too, but these look different, and they are most likely cost prohibitive for arbitrary function. There is the marching tetrahedra algorithm too, but I doesn't look like it and don't see a reason to use it now that the patent for the marching cubes algorithm has expired.


It's @iquilezles's work who is a ray marching wizard, in the most literal sense of the word that still comports with reality.


Source? As far as I know, iq has been full-time at Adobe.


I like calc paired with gnuplot.

https://github.com/lcn2/calc

inb4 dc(1)/bc(1)... calc supports complex numbers, C-like pseudo structures/functions, custom decimal points and lots more.

Also, calc/gnuplot will run on a toaster or even legacy systems from 20-25 years ago.


This is fantastic! So easy to move, zoom and rotate the graph with exactly the mouse buttons you'd expect. In most even commercial math packages this is always super clunky


How does one move with the mouse? I could only find gestures for rotation and zoom; for movement I had to resort to manually entering coordinates in the settings.


Translating looks not possible, I shouldn't have said 'move' in my list. At least you can add constants in the formula to move...


The equation editor is so intuitive. Here's something I got from just typing in stuff and tweaking it: https://www.desmos.com/3d/6f4cd9930d


That's awesome, just rotating the cube is fun.

Makes me think of space maps for some reason in scifi

Edit: I know there's cool stuff to graph like saddle from calc 3


Fun, there was a program for the Amiga called "Doug's Math Aquarium" which I found to be pretty neat, it has a lot of that feel. Don't know how to get it to insert i (aka sqrt(-1)) but that can be worked around. Another fun thing would be color gradient for magnitude. Definitely fun times and super quick.


I can't wait to play Super Mario in this when someone inevitably makes a 3D rendering engine in it.


Go ahead and spend an afternoon exploring sinusoidal waves: https://www.desmos.com/calculator/w9jrdpvsmk



Desmos is honestly probably one of the best things to come out of the web- it's an impressive tool and I am truly thankful for all the insight it's given me in my mathematics classes. Super stoked to see what bananas things the desmos community makes with this!


Can anyone recommend calculator to explain basic concepts to 10 year old? Like 3 * 10 = 30. Or 100 * 200 = 2000. Or 3 * 3 * 3 = 27, etc.


The 2D calculator could already display 3D curves with a projection layer [1], but it's nice to have it built-in. I built a few models of analog hardware with that trick that brought it to its knees back in 2016.

[1] https://www.desmos.com/calculator/atydw7bpnu


This is very cool. I'm involved with an open source project that's similar to this, called 3Demos: https://3demos.ctl.columbia.edu/

On github at https://github.com/ccnmtl/3demos



This is my favorite online graphing calculator. It's been around for a while. It got me through pre-calculus.


I use it for (some) quant finance work. It's not a toy, shockingly versatile.


I recall using desmos to render solutions to constraints in my physics classes in college. My favorite was plugging in the equation for the normal modes of a driven, oscilating square sheet and watching the vibration pattern pop right onscreen.


I try with this example sin(x^2+y^2)

Obliviously, this function is centrally symmetric. However, when rotating the graphic, it can be seen that the ripples on the surface are not uniform. I believe this is due to the sampling method. Take a look and see if there are any areas that can be improved.


Desmos has had a place in my bookmark bar for years now this is a very cool addition.


3D saddle formula:

   f(xy)=z
Sphere:

   (x-h)^2+(y-k)^2+(z-l)^2=5^2


it's a fun thing to do

here's a 'hyperdimensional' plotter i built when i was 18?

http://skylab.org/~felix/hyperspace/animation.html

you can surprisingly get very far with a little JS

these days I default to plotly for most things, the wolframalpha.com when i'm really lazy. i do have a friend that has been smitten by mathematica for the past decade though


Thanks desmos, for making my calculus assignments enjoyable.


I've used this thing so much throughout the years and love it. Super helpful when making shaders and stuff to test ideas.


Nice! What is the onscreen keyboard is integrated into the calculator? Is it your custom solution, or some publicly available?


Very cool.

Reminds me of dwitter:

https://www.dwitter.net/


what's the relationship between desmos and geogebra? is one a fork of the other one?


I don't think their codebases are particularly connected: AFAIK Desmos is a client-side browser app, so the software is distributed to the user for using in that way, which seems incompatible with the GPL3+ licensing of the GeoGebra codebase.

https://github.com/geogebra/geogebra


There is none, just competing products.


I’ve been using their 2d graphing calculator since college and love it


Very great! Is there a way to increase the resolution though?


Is it possible to model anything with a single equation?


didn't realise desmos had a desktop client, but i've been a happy user of their android app for years. best calculator on android by far.


Is Desmos open source ?

What's the pricing for commercial partners?


Curious if this is using WebGPU


It’s WebGL, not WebGPU


Super cool!


Wow this is painfully slow, the CPU usage for rotating the scene is insane, I can't look at the code right now but wow.. I expect better from them

EDIT: If you are using Chrome, make sure you are on the latest version, the latest v118 fixed it for me


Curious - do you have hardware acceleration disabled? Rotating the scene shouldn't be hammering the CPU if hardware acceleration is enabled. [disclaimer: I work at Desmos]


I was using Chrome 117, looks like there was a new 118 update, it now is butter smooth!

Looks like 117 was just broken


Nice! Really good to know. We'll add that to our list of device/browser combos that might cause trouble so that at minimum we can warn folks. It's an early beta so we're enthusiastically collecting any examples (system configurations and also graphs) that cause problems, so if you see anything amiss we'd love to hear about it (feedback@desmos.com). [disclaimer: I work at Desmos]


Since you work at Desmos: is there any way to have animated variables start/stop based on the value of some other variable? Or functions that graph different formulas based on a conditional? Etc.

For example, variable X is continuously cycling between -10 and +10, but only when variable D is > 1. At my son's school, there is a kind of interactive demoscene going on using Desmos (the kids believe that the school cannot block Desmos from the Chromebooks, therefore they will always have it available).


Fun question. There are a couple options:

(1) the more straightforward (but less powerful) option is to use the dynamic bounds for a slider. Here, "a" is set to animate, but the bounds don't let it move if b=0: https://www.desmos.com/calculator/mqhhpso67r

(2) the more general feature that allows for complex scripting behavior is called "actions." Here's an example that uses that, where it's more of a genuine play/pause: https://www.desmos.com/calculator/gzqwx36lo0

It's a beta feature that needs to be enabled, but anyone can turn it on. More here: https://help.desmos.com/hc/en-us/articles/4407725009165-Acti...


Thanks! I will pass those on


Could you share what function you plotted? A very simple z = x^2 + y^2 worked fine so I'm curious where its limits are


Smooth as butter here, instant changes and fast rendering. v117.0.5938.152




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: