Class MagnetWheel

A wheel with magnetic points around its circumference. A fixed magnet causes the wheel to turn until one of the magnets is stuck being very close to the fixed magnet.

Note that there should always be a slight gap between the fixed magnet and any of the magnet points. If there is no gap then infinite forces will result from the inverse square force law of magnetism.

Potential Energy Calculation

For each magnet we numerically integrate the torque due to that magnet, as though the wheel rotated from the current position of the magnet until the magnet is as close as possible to the fixed magnet.

Constructors

• Parameters

• `Optional`opt_name: string

name of this MagnetWheel for scripting (language independent)

• `Optional`opt_localName: string

localized name of this MagnetWheel, for display to user

Properties

angular_velocity_: number = 0

angular velocity about center of mass

cm_body_: Vector = Vector.ORIGIN

center of mass in body coordinates

cosAngle_: number = 1.0

cosine of angle.

fixedMagnet_: Vector = ...

location of fixed magnet in world coordinates.

magnetDist_: number[] = []

Distance of each magnet from origin.

magnets_: Vector[] = []

Locations of magnets in body coordinates.

minHeight_: number = NaN

the minimum value the vertical position of this body can take on, used in energy calculations

moment_: number = 0

moment about center of mass divided by mass

sinAngle_: number = 0.0

sine of angle

zeroEnergyLevel_: null | number = null

the vertical coordinate where this body has zero potential energy; or null to use the default zero energy level.

ID: number = 1

Counter used for naming SimObjects.

wheel_ID: number = 1

Counter used for naming MagnetWheel.

Methods

• Moves this body so that a certain point on this body is aligned to the given world coordinates location; optionally sets the angle of this body by rotating around the center of mass `angle` radians counter-clockwise from the body coordinates orientation.

Parameters

• p_body: GenericVector

the point on this body to be aligned to the new `p_world` location, in body coordinates

• p_world: GenericVector

the world coordinates location to move the specified `p_body` point to

• `Optional`opt_angle: number

the angle in radians to rotate this body counter-clockwise from 'body coordinates' orientation; if not specified then leave the angle as is.

Throws

if this MassObject is immoveable

• Creates the JavaScript Canvas path that represents the shape of this object in the given Canvas context using body coordinates. Note that this calls `CanvasRenderingContext2D.beginPath()` which discards any currently defined path and begins a new one. Also, this concept of 'path' is different from the path of Edges that makes up a Polygon (though the Canvas path is created from those Polygon paths).

Parameters

• _context: CanvasRenderingContext2D

the CanvasRenderingContext2D to create the path in

Returns void

• Ensures this ForceLaw is not connected to anything and so can be garbage collected. For example, if this ForceLaw is an Observer, this will stop observing its Subject.

Returns void

• Returns the counter-clockwise angle of rotation of this body about its center of mass, in radians, relative to 'body coordinates' orientation.

Returns number

the counter-clockwise angle of rotation of this body about its center of mass, in radians, relative to 'body coordinates' orientation

• Returns vertical coordinate of bottom-most point of this body, based on its current position and orientation, in world coordinates. This is approximate when the body has curved edges; because this looks at all the Vertex's of the body, and curved edges have a series of 'decorated' Vertexes on them which don't capture the exact nature of the geometric curve.

Returns number

vertical coordinate of bottom-most point of this body, in world coordinates

• Returns vertical coordinate of left-most point of this body, based on its current position and orientation, in world coordinates. This is approximate when the body has curved edges; because this looks at all the Vertex's of the body, and curved edges have a series of 'decorated' Vertexes on them which don't capture the exact nature of the geometric curve.

Returns number

vertical coordinate of left-most point of this body, in world coordinates

• Returns the locations of magnets, in body coordinates.

Returns Vector[]

locations of magnets, in body coordinates.

• Returns the minimum height that this body's center of gravity can reach, used for potential energy calculations. Put another way: this is how low the center of gravity of this body can be when resting on the ground, and the ground is at height zero.

Returns number

the minimum height this body can reach.

• Name of this SimObject, either the language-independent name for scripting purposes or the localized name for display to user.

The language-independent name should be the same as the English version but capitalized and with spaces and dashes replaced by underscore, see Util.toName, nameEquals.

The name should give an idea of the role of the SimObject in the simulation. This allows us to to treat an object in a special way depending on its name. For example, we might use the name to decide what type of DisplayObject to create to represent the SimObject.

Parameters

• `Optional`opt_localized: boolean

`true` means return the localized version of the name; default is `false` which means return the language independent name.

Returns string

name of this SimObject

• Returns the radius of this object.

Returns number

• Returns vertical coordinate of right-most point of this body, based on its current position and orientation, in world coordinates. This is approximate when the body has curved edges; because this looks at all the Vertex's of the body, and curved edges have a series of 'decorated' Vertexes on them which don't capture the exact nature of the geometric curve.

Returns number

vertical coordinate of right-most point of this body, in world coordinates

• Returns vertical coordinate of top-most point of this body, based on its current position and orientation, in world coordinates. This is approximate when the body has curved edges; because this looks at all the Vertex's of the body, and curved edges have a series of 'decorated' Vertexes on them which don't capture the exact nature of the geometric curve.

Returns number

vertical coordinate of top-most point of this body, in world coordinates

• Returns torque due to a given magnet when it is at the given angle.

Parameters

• idx: number

index of magnet

• angle: number

angle in radians. Zero is east, pi/2 is north.

Returns number

torque due to that magnet at that angle

• Returns velocity of the given point on this object. The point is specified in body coordinates, but the velocity is in world coordinates.

Parameters

• `Optional`p_body: GenericVector

the point to find the velocity of, in body coordinates; if undefined, then center of mass is used

Returns Vector

the velocity of the given point, in world coordinates

• Returns the vertical coordinate where the body has zero potential gravitational energy under standard constant gravity when the body's center of mass is at this vertical coordinate.

Returns null | number

the vertical world coordinate where this body has zero potential energy; or null to use the default zero energy level

• Returns the linear and angular momentum of this body. Angular momentum about a fixed point in space is defined as

``````I_cm vw k + r x m v_cm
``````

where:

``````I_cm = moment about center of mass
vw = angular velocity
k = unit z vector,
r = vector from a fixed point to the center of mass (cm)
m = mass
v_cm = velocity of center of mass
``````

cross product in the plane is `(ax,ay,0) x (bx,by,0) = k(ax by - ay bx)` so we get

``````I_cm w + m (rx vy - ry vx)
``````

take the fixed point to be the origin `(0,0)`, so `(rx,ry)` is center of mass.

Returns number[]

the momentum of this body as array containing horizontal, vertical and angular momentum in that order.

• Rotates a body coordinates vector to its orientation in world coordinates. The vector goes from the origin (0, 0), to the given point in body coordinates. The vector is rotated about the origin by the current angle of this body.

Parameters

• v_body: GenericVector

the vector, in body coordinates

Returns Vector

the rotated vector in world coordinates.

• Rotates a world coordinates vector to its orientation in body coordinates, the inverse of rotateBodyToWorld method. The vector goes from the origin `(0, 0)`, to the given point in world coordinates. The vector is rotated about the origin by the opposite of the current angle of this body.

Parameters

• v_world: GenericVector

the the vector to be rotated, in world coordinates

Returns Vector

the rotated vector in body coordinates.

• Sets the angle in radians of counter-clockwise rotation of this object around its center of mass. Angle zero draws the object in the same orientation as in body coordinates. Angle `Math.PI/2` rotates the body clockwise 90 degrees from its body coordinates orientation.

Parameters

• angle: number

the angle in radians to rotate this object counter-clockwise about its center of mass from 'body coordinates' orientation

Returns void

• Set location of the fixed magnet.

Parameters

• loc: Vector

the location of the fixed magnet

Returns MagnetWheel

this object for chaining setters

• Set the strength of each magnet.

Returns void

• Sets the locations of magnets, in body coordinates.

Parameters

• locations: Vector[]

locations of magnets, in body coordinates

Returns void

• Sets the minimum height that this body can reach, used for potential energy calculations. That is, how low can the center of gravity of this body go?

Parameters

• minHeight: number

the minimum height that this body can reach.

Returns void

• Sets the moment of inertia about the center of mass for this body divided by the mass of this body. The moment of inertia, `Icm`, measures how much force is needed to rotate the body about the center of mass. `Icm` depends on the shape of the object and how mass is distributed. For a thin rectangular plate:

``````Icm = mass * (width^2 + height^2) / 12
``````

For a thin circular plate:

``````Icm = mass * radius^2 / 2
``````

Note that momentAboutCM returns the number specified here multiplied by the mass of the body.

Parameters

• moment: number

the moment of inertia about the center of mass for this body divided by the mass of this body

Returns void

• Moves this body so that the center of mass is at the given world coordinates location; rotates this body counter-clockwise about center of mass from 'body coordinates' orientation by the given angle in radians.

Parameters

• loc_world: GenericVector

the location in world coordinates

• `Optional`angle: number

the angle in radians to rotate this body counter-clockwise from 'body coordinates' orientation; if undefined then angle is not changed

Returns void

• Sets radius of this object.

Returns MagnetWheel

this object for chaining setters

• Set the linear velocity of this objects's center of mass, and (optional) angular velocity of rotation about the objects's center of mass.

Parameters

• velocity_world: GenericVector

the velocity in world coordinates/second

• `Optional`angular_velocity: number

the angular velocity, in radians/second, with positive meaning counter-clockwise rotation about the body's center of mass; if undefined, then angular velocity is not changed

Returns void

• Sets the vertical coordinate where the body has zero potential gravitational energy under standard constant gravity when the body's center of mass is at this vertical coordinate.

Parameters

• `Optional`height: number

the vertical world coordinate where this body has zero potential energy; `NaN` means to use default level; `undefined` means use the body's current vertical location is used

Returns void

• Returns true if the given SimObject is similar to this SimObject for display purposes. SimObjects are similar when they are the same type and nearly the same size and location. Mainly used when showing forces - to avoid adding too many objects to the display. See SimList.getSimilar.

Parameters

• _obj: SimObject

the SimObject to compare to

• `Optional`_opt_tolerance: number

the amount the object components can differ by

Returns boolean

true if this SimObject is similar to `obj` for display purposes

• Returns a minimal string representation of this object, usually giving just identity information like the class name and name of the object.

For an object whose main purpose is to represent another Printable object, it is recommended to include the result of calling `toStringShort` on that other object. For example, calling `toStringShort()` on a DisplayShape might return something like this:

``````DisplayShape{polygon:Polygon{'chain3'}}
``````

Returns string

a minimal string representation of this object.

Generated using TypeDoc