How to make two objects have 'same volume' but different parameters, surface area etc

hi guys,
i know this is just basic but since rhino is a very powerful software i think there’s some tools and commands to do it… which i couldn’t find…i want to create some different looking shapes like cube, cuboid, 3d hexagon, sphere etc to have same volume. Through calculations it can be done for simple forms but for complex forms some commands needed, i m trying to make some examples for my presentation please do help

example file.3dm (60.2 KB)

1 Like

Volume scales as the length cubed. To scale object A to be the same volume as object B, first use Volume to measure the volumes of A and B. Then Scale A with the ratio of cube root of (volume of B divided by volume of A).

1 Like

how do i do the cube root division in rhino?

One method:

exp((ln(B/A)/3) B is the volume of object B and A is the volume of object A

1 Like

Here is a quickie script hack…

Edit - new version - fixed a number of errors and cleaned it up… (1.9 KB)


thanks alot

do u know how to check surface area too??

Do you use grasshopper? If so Pufferfish has has Scale To Area, Scale To Volume, and Scale To Length components that will let you scale any geometries (that are measurable) to those specified sizes, uniformly or non uniformly.


okay good one i like pufferfish but how do i find out the surface area of selected complex object/form?

In grasshopper the area component will give you surface area. For the Pufferfish Scale To Area component you just plug in the geometry and then in the area just input the desired surface area and it will resize it to be that surface area.

1 Like

Here is another script adapted from the first one that checks area… (1.5 KB)


yes thats so cool thank you so much… God bless!

1 Like

thank you so much…God bless!

And if you want to deform it non-uniformly but still maintain a desired area you can change the weight of the X,Y,Z factors


is it possible to replace scale with scale 1d to only scale the height of an object for example to match the same volume?

Should be… As Scale1D is direction-dependent, you would need to supply a scaling direction - either user input (2 points or something like that) or perhaps in one of the axis directions of the active viewport… So by “height” you want it to scale in World Z? From the bottom of the object up? From the object center?

pick 2 pts would likely be the most versatile. i tried to analyze your script to change it myself but i am not up to it. i simply need a cubic object which matches the volume of a cylinder by only scaling its height.

OK, here ya go… try this one out. (2.3 KB)


1 Like

hehe cool that works :smiley:


Hi Mitch. I’ve just been playing around with your script. I’m trying to get the volume of the blue ring (please see attached image) to match that of the green ring, but so it shrinks the height (or depth) of the ring and not the width. The thin red circle on the inside of the blue ring is the finger size so the blue ring needs to stay that size - only the height of the ring is allowed to reduce. The whole purpose of this is to create different sized wedding rings, say for example 6mm wide, but all weighing the same in different finger sizes - the smaller finger sizes will have a thicker depth, while the larger finger sizes will have a shallower depth. I was wondering whether you might be able to tweak your script to allow 2D sizing (if that would work?) Many thanks, Mike.