Hipmunk-5.2.0.14: A Haskell binding for Chipmunk.

Copyright(c) 2008-2010 Felipe A. Lessa
LicenseMIT (see LICENSE)
Maintainerfelipe.lessa@gmail.com
Stabilityprovisional
Portabilityportable (needs FFI)
Safe HaskellNone
LanguageHaskell98

Physics.Hipmunk.Common

Contents

Description

Functionality used by various modules and routines for initialization and change of global variables.

Synopsis

Initialization

initChipmunk :: IO () Source

Initilizes the Chipmunk library. This should be called once before using any functions of this library.

Basic data types

type CpFloat = Double Source

The floating point type used internally in Chipmunk.

infinity :: CpFloat Source

infinity may be used to create bodies with an infinite mass.

type Time = CpFloat Source

Type synonym used to hint that the argument or result represents time.

type Angle = CpFloat Source

Type synonym used to hint that the argument or result represents an angle in radians.

type Distance = CpFloat Source

Type synonym used to hint that the argument or result represents a distance.

type Damping = CpFloat Source

Type synonym used to hint that the argument or result represents a damping constant.

Global variables

Chipmunk tries to maintain a very few number of global variables to allow multiple Spaces to be used simultaneously, however there are some.

Shape counter

The shape counter is a global counter used for creating unique hash identifiers to the shapes.

resetShapeCounter :: IO () Source

resetShapeCounter reset the shape counter to its default value. This is used to add determinism to a simulation. As the ids created with this counter may affect the order in which the collisions happen, there may be very slight differences in different simulations. It may be very useful to call resetShapeCounter everytime you start a new simulation.

However, be careful as you should not use shapes created before a call to resetCounter with shapes created after it as they may have the same id. This means that you can't add shapes created after the call to a space created before it.

Contact persistence

This variable determines how long contacts should persist. It should be small as the cached contacts will only be close for a short time. (default is 3)

Collision slop

The collision slop is the amount that shapes are allowed to penetrate. Setting this to zero will work just fine, but using a small positive amount will help prevent oscillating contacts. (default is 0.1)

Bias coefficient

The amount of penetration to reduce in each step. Values should range from 0 to 1. Using large values will eliminate penetration in fewer steps, but can cause vibration. (default is 0.1)

Constraint bias coefficient

Similar to the bias coefficient, but sets the default bias for all constraints. (default is 0.1)

Vectors

data Vector Source

A two-dimensional vector. It is an instance of Num however the operations signum and (*) are not supported.

Constructors

Vector !CpFloat !CpFloat 

type Position = Vector Source

Type synonym used to hint that the argument or result represents a position.

fromAngle :: Angle -> Vector Source

Constructs an unitary vector pointing to the given angle (in radians).

len :: Vector -> CpFloat Source

The length of a vector.

normalize :: Vector -> Vector Source

Normalizes the vector (i.e. divides it by its length).

scale :: Vector -> CpFloat -> Vector Source

Scales the components of a vector by the same amount.

toAngle :: Vector -> Angle Source

toAngle v is the angle that v has with the vector Vector 1 0 (modulo 2*pi).

dot :: Vector -> Vector -> CpFloat Source

v1 `dot` v2 computes the familiar dot operation.

cross :: Vector -> Vector -> CpFloat Source

v1 `cross` v2 computes the familiar cross operation.

perp :: Vector -> Vector Source

perp v is a vector of same length as v but perpendicular to v (i.e. toAngle (perp v) - toAngle v equals pi/2 modulo 2*pi).

project :: Vector -> Vector -> Vector Source

v1 `project` v2 is the vector projection of v1 onto v2.

rotate :: Vector -> Vector -> Vector Source

v1 `rotate` v2 uses complex multiplication to rotate (and scale) v1 by v2.

unrotate :: Vector -> Vector -> Vector Source

The inverse operation of rotate, such that unrotate (rotate v1 v2) v2 equals v1.