-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Ellipsoid3d module #135
Comments
See https://en.wikipedia.org/wiki/Ellipsoid for volume/surface area calculations. |
I came up with this "API" while organizing my thoughts. Constructors
Properties
(something to get
Queries
Transformations
(will an ellipsoid projection always be an ellipsis? - that considering that a circle is a special case of an ellipsis)
Unit conversions
Coordinate conversions
|
Hey @g-belmonte! I think that mostly looks good except that I don't think I suspect that the projection of an ellipsoid onto a plane would in fact always be an ellipse, but the math could get pretty tricky! Probably OK to leave that one out for now. It looks like you've based this mostly off of with :
{ axes : Frame3d units coordinates defines
, xRadius : Quantity Float units
, yRadius : Quantity Float units
, zRadius : Quantity Float units
}
-> Ellipsoid3d units coordinates
axes : Ellipsoid3d units coordinates -> Frame3d units coordinates defines
xAxis : Ellipsoid3d units coordinates -> Axis3d units coordinates
-- plus yAxis, zAxis
xDirection : Ellipsoid3d units coordinates -> Direction3d coordinates
-- plus yDirection, zDirection
xRadius : Ellipsoid3d units coordinates -> Quantity Float units
-- plus yRadius, zRadius
signedDistanceAlong : Axis3d units coordinates -> Ellipsoid3d units coordinates -> Interval Float units With those functions in place, I'm not sure you'd really need accessors for the points where the ellipsoid intersects its own axes - if necessary you could get them pretty easily with Point3d.along (Ellipsoid3d.xAxis ellipsoid) (Ellipsoid3d.xRadius ellipsoid)
Point3d.along (Ellipsoid3d.xAxis ellipsoid) (Quantity.negate (Ellipsoid3d.xRadius ellipsoid)) etc. |
Hey there, @ianmackenzie ! Here's another sketch: Constructorswith :
{ axes : Frame3d units coordinates defines
, xRadius : Quantity Float units
, yRadius : Quantity Float units
, zRadius : Quantity Float units
}
-> Ellipsoid3d units coordinates PropertiescenterPoint : Ellipsoid3d units coordinates -> Point3d units coordinates
axes : Ellipsoid3d units coordinates -> Frame3d units coordinates defines
xAxis : Ellipsoid3d units coordinates -> Axis3d units coordinates
yAxis : Ellipsoid3d units coordinates -> Axis3d units coordinates
zAxis : Ellipsoid3d units coordinates -> Axis3d units coordinates
xDirection : Ellipsoid3d units coordinates -> Direction3d coordinates
yDirection : Ellipsoid3d units coordinates -> Direction3d coordinates
zDirection : Ellipsoid3d units coordinates -> Direction3d coordinates
xRadius : Ellipsoid3d units coordinates -> Quantity Float units
yRadius : Ellipsoid3d units coordinates -> Quantity Float units
zRadius : Ellipsoid3d units coordinates -> Quantity Float units
volume : Ellipsoid3d units coordinates -> Quantity Float (Cubed units)
surfaceArea : Ellipsoid3d units coordinates -> Quantity Float (Squared units)
boundingBox : Ellipsoid3d units coordinates -> BoundingBox3d units coordinates Queriescontains : Point3d units coordinates -> Sphere3d units coordinates -> Bool MeasurementsignedDistanceAlong : Axis3d units coordinates -> Ellipsoid3d units coordinates -> Interval Float units TransformationsscaleAbout :
Point3d units coordinates
-> Float
-> Ellipsoid3d units coordinates
-> Ellipsoid3d units coordinates
rotateAround :
Axis3d units coordinates
-> Angle
-> Ellipsoid3d units coordinates
-> Ellipsoid3d units coordinates
translateBy :
Vector3d units coordinates
-> Ellipsoid3d units coordinates
-> Ellipsoid3d units coordinates
translateIn :
Direction3d coordinates
-> Quantity Float units
-> Ellipsoid3d units coordinates
-> Ellipsoid3d units coordinates
mirrorAcross :
Plane3d units coordinates
-> Ellipsoid3d units coordinates
-> Ellipsoid3d units coordinates Unit conversionsat :
Quantity Float (Rate units2 units1)
-> Ellipsoid3d units1 coordinates
-> Ellipsoid3d units2 coordinates
at_ :
Quantity Float (Rate units1 units2)
-> Ellipsoid3d units1 coordinates
-> Ellipsoid3d units2 coordinates Coordinate conversionsrelativeTo :
Frame3d units globalCoordinates { defines : localCoordinates }
-> Ellipsoid3d units globalCoordinates
-> Ellipsoid3d units localCoordinates
placeIn :
Frame3d units globalCoordinates { defines : localCoordinates }
-> Ellipsoid3d units localCoordinates
-> Ellipsoid3d units globalCoordinates |
I think that all looks good! The I don't think it's a function that most people will use much, but it's a necessary low-level function for a few other functions in |
Yes, it does make sense! |
@ianmackenzie I think this issue may be closed :) |
Right you are! Implemented in #142. |
3D version of
Ellipse2d
; would be useful for 3D rendering. Should mostly be able to follow the pattern established byEllipse2d
andSphere3d
.The text was updated successfully, but these errors were encountered: