Add initial prototype.
146
3-mid/physics/implement/box2d/contrib/docs/FAQ.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# FAQ
|
||||
|
||||
## What is Box2D?
|
||||
|
||||
Box2D is a feature rich 2D rigid body physics engine, written in C++ by Erin Catto. It has been used in many games, including Crayon Physics Deluxe, winner of the 2008 Independant Game Festival Grand Prize.
|
||||
|
||||
Box2D uses the [MIT license](https://en.wikipedia.org/wiki/MIT_License) license and can be used free of charge.
|
||||
|
||||
## What platforms does Box2D support?
|
||||
|
||||
Box2D is developed on Windows using Visual C++. Ports are also available for Flash, Java, C#, Python.
|
||||
|
||||
Erin Catto maintains the C++ version, but provides no support for other languages. Other languages are supported by the community and possibly by the authors of those ports.
|
||||
|
||||
## Who makes it?
|
||||
|
||||
Erin Catto is the driving force behind Box2D, with various others supporting the ports. Box2D is an open source project, and accepts community feedback.
|
||||
|
||||
## How do I get help?
|
||||
|
||||
You should read the documentation and the rest of this FAQ first. Also, you should study the examples included in the source distribution. Then you can visit the [subreddit](https://www.reddit.com/r/box2d/) to ask any remaining questions.
|
||||
|
||||
Please to not PM or email Erin Catto for support. It is best to ask questions in the forum so that everyone can benefit from the discussion.
|
||||
|
||||
## Documentation
|
||||
|
||||
### Why isn't feature foo documented?
|
||||
|
||||
If you grab the latest code from the git master branch you will likely find features that are not documented in the manual. New features are added to the manual after they are mature and a new point release is imminent. However, all major features added to Box2D are accompanied by example code in the testbed to test the feature and show the intended usage.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
### Programming
|
||||
|
||||
You should have a working knowledge of C++ before you use Box2D. You should understand classes, inheritance, and pointers. There are plenty of resources on the web for learning C++. You should also understand your development environment: compilation, linking, and debugging.
|
||||
|
||||
### Math and Physics
|
||||
|
||||
You should have a basic knowledge of rigid bodies, force, torque, and impulses. If you come across a math or physics concept you don't understand, please read about it on Wikipedia. Visit this [page](http://box2d.org/publications/) if you want a deeper knowledge of the algorithms used in Box2D.
|
||||
|
||||
## API
|
||||
|
||||
### What units does Box2D use?
|
||||
|
||||
Box2D is tuned for meters-kilograms-seconds (MKS). Your moving objects should be between 0.1 - 10 meters. Do not use pixels as units! You will get a jittery simulation.
|
||||
|
||||
### How do I convert pixels to meters?
|
||||
|
||||
Suppose you have a sprite for a character that is 100x100 pixels. You decide to use a scaling factor that is 0.01. This will make the character physics box 1m x 1m. So go make a physics box that is 1x1. Now suppose the character starts out at pixel coordinate (345,679). So position the physics box at (3.45,6.79). Now simulate the physics world. Suppose the character physics box moves to (2.31,4.98), so move your character sprite to pixel coordinates (231,498).
|
||||
Now the only tricky part is choosing a scaling factor. This really depends on your game. You should try to get your moving objects in the range 0.1 - 10 meters, with 1 meter being the sweet spot.
|
||||
|
||||
### Why don't you use this awesome C++ feature?
|
||||
|
||||
Box2D is designed to be portable, so I try to keep the C++ usage simple. Also, I don't use the STL (except sort) or other libraries to keep the dependencies low. I keep template usage low and don't use name spaces. Remember, just because a C++ feature exists, that doesn't mean you need to use it.
|
||||
|
||||
The many ports of Box2D to other languages platforms shows that this strategy has been successful.
|
||||
|
||||
### Can I use Box2D in a DLL?
|
||||
|
||||
Box2D was not designed to be used in a DLL. You may have to change how static data is used to make this work.
|
||||
|
||||
### Is Box2D thread-safe?
|
||||
|
||||
No. Box2D will likely never be thread-safe. Box2D has a large API and trying to make such an API thread-safe would have a large performance and complexity impact.
|
||||
|
||||
## Build Issues
|
||||
|
||||
### Why doesn't my code compile and/or link?
|
||||
|
||||
There are many reasons why a build can go bad. Here are a few that have come up:
|
||||
|
||||
* Using old Box2D headers with new code
|
||||
* Not linking the Box2D library with your application
|
||||
* Using old project files that don't include some new source files
|
||||
|
||||
## Rendering
|
||||
|
||||
### What are Box2D's rendering capabilities?
|
||||
|
||||
Box2D is only a physics engine. How you draw stuff is up to you.
|
||||
|
||||
### But the Testbed draws stuff
|
||||
|
||||
Visualization is very important for debugging collision and physics. I wrote the test bed to help me test Box2D and give you examples of how to use Box2D. The TestBed is not part of the Box2D library.
|
||||
|
||||
### How do I draw shapes?
|
||||
|
||||
Drawing shapes is not supported and shape internal data is likely to change. Instead you should implement the `b2DebugDraw` interface.
|
||||
|
||||
## Accuracy
|
||||
|
||||
Box2D uses approximate methods for a few reasons.
|
||||
|
||||
* Performance
|
||||
* Some differential equations don't have known solutions
|
||||
* Some constraints cannot be determined uniquely
|
||||
|
||||
What this means is that constraints are not perfectly rigid and sometimes you will see some bounce even when the restitution is zero.
|
||||
Box2D uses Gauss-Seidel to approximately solve constraints.
|
||||
Box2D also uses Semi-implicit Euler to approximately solve the differential equations.
|
||||
Box2D also does not have exact collision. Polygons are covered with a thin skin (around 0.5cm thick) to avoid numerical problems. This can sometimes lead to unexpected contact normals. Also, some shapes may begin to overlap and then be pushed apart by the solver.
|
||||
|
||||
## Making Games
|
||||
|
||||
### Worms Clones
|
||||
|
||||
Making a worms clone requires arbitrarily destructible terrain. This is beyond the scope of Box2D, so you will have to figure out how to do this on your own.
|
||||
|
||||
### Tile Based Environment
|
||||
|
||||
Using many boxes for your terrain may not work well because box-like characters can get snagged on internal corners. A future update to Box2D should allow for smooth motion over edge chains. In general you should avoid using a rectangular character because collision tolerances will still lead to undesirable snagging.
|
||||
|
||||
### Asteroid Type Coordinate Systems
|
||||
|
||||
Box2D does not have any support for coordinate frame wrapping. You would likely need to customize Box2D for this purpose. You may need to use a different broad-phase for this to work.
|
||||
|
||||
## Determinism
|
||||
|
||||
### Is Box2D deterministic?
|
||||
|
||||
For the same input, and same binary, Box2D will reproduce any simulation. Box2D does not use any random numbers nor base any computation on random events (such as timers, etc).
|
||||
|
||||
However, people often want more stringent determinism. People often want to know if Box2D can produce identical results on different binaries and on different platforms. The answer is no. The reason for this answer has to do with how floating point math is implemented in many compilers and processors. I recommend reading this article if you are curious: http://www.yosefk.com/blog/consistency-how-to-defeat-the-purpose-of-ieee-floating-point.html
|
||||
|
||||
### But I really want determinism
|
||||
|
||||
This naturally leads to the question of fixed-point math. Box2D does not support fixed-point math. In the past Box2D was ported to the NDS in fixed-point and apparently it worked okay. Fixed-point math is slower and more tedious to develop, so I have chosen not to use fixed-point for the development of Box2D.
|
||||
|
||||
## Why is the restitution/friction mixing inaccurate?
|
||||
|
||||
A physically correct restitution value must be measured in experiments. But as soon as you change the geometry from the experiment then the value is wrong. Next, adding simultaneous collision makes the answer worse. We've been down this road before.
|
||||
|
||||
So the question of accuracy has been answered: failure.
|
||||
|
||||
The only remaining question is how do we make it convenient. On this opinions may vary.
|
||||
|
||||
`b2Settings` is just that. Settings you can adjust if you know what you are doing.
|
||||
|
||||
## What are the biggest mistakes made by new users?
|
||||
|
||||
* Using pixels for length instead of meters.
|
||||
* Expecting Box2D to give pixel perfect results.
|
||||
* Using b2Polygon to create concave polygons.
|
||||
* Testing their code in release mode.
|
||||
* Not learning C++ before using Box2D.
|
||||
* Not reading this FAQ. :)
|
||||
433
3-mid/physics/implement/box2d/contrib/docs/collision.md
Normal file
@@ -0,0 +1,433 @@
|
||||
# Collision Module
|
||||
The Collision module contains shapes and functions that operate on them.
|
||||
The module also contains a dynamic tree and broad-phase to acceleration
|
||||
collision processing of large systems.
|
||||
|
||||
The collision module is designed to be usable outside of the dynamic
|
||||
system. For example, you can use the dynamic tree for other aspects of
|
||||
your game besides physics.
|
||||
|
||||
However, the main purpose of Box2D is to provide a rigid body physics
|
||||
engine, so the using the collision module by itself may feel limited for
|
||||
some applications. Likewise, I will not make a strong effort to document
|
||||
it or polish the APIs.
|
||||
|
||||
## Shapes
|
||||
Shapes describe collision geometry and may be used independently of
|
||||
physics simulation. At a minimum, you should understand how to create
|
||||
shapes that can be later attached to rigid bodies.
|
||||
|
||||
Box2D shapes implement the b2Shape base class. The base class defines
|
||||
functions to:
|
||||
- Test a point for overlap with the shape.
|
||||
- Perform a ray cast against the shape.
|
||||
- Compute the shape's AABB.
|
||||
- Compute the mass properties of the shape.
|
||||
|
||||
In addition, each shape has a type member and a radius. The radius even
|
||||
applies to polygons, as discussed below.
|
||||
|
||||
Keep in mind that a shape does not know about bodies and stand apart
|
||||
from the dynamics system. Shapes are stored in a compact form that is
|
||||
optimized for size and performance. As such, shapes are not easily moved
|
||||
around. You have to manually set the shape vertex positions to move a
|
||||
shape. However, when a shape is attached to a body using a fixture, the
|
||||
shapes move rigidly with the host body. In summary:
|
||||
- When a shape is **not** attached to a body, you can view it's vertices as being expressed in world-space.
|
||||
- When a shape is attached to a body, you can view it's vertices as being expressed in local coordinates.
|
||||
|
||||
### Circle Shapes
|
||||
Circle shapes have a position and radius. Circles are solid. You cannot
|
||||
make a hollow circle using the circle shape.
|
||||
|
||||
```cpp
|
||||
b2CircleShape circle;
|
||||
circle.m_p.Set(2.0f, 3.0f);
|
||||
circle.m_radius = 0.5f;
|
||||
```
|
||||
|
||||
### Polygon Shapes
|
||||
Polygon shapes are solid convex polygons. A polygon is convex when all
|
||||
line segments connecting two points in the interior do not cross any
|
||||
edge of the polygon. Polygons are solid and never hollow. A polygon must
|
||||
have 3 or more vertices.
|
||||
|
||||

|
||||
|
||||
Polygons vertices are stored with a counter clockwise winding (CCW). We
|
||||
must be careful because the notion of CCW is with respect to a
|
||||
right-handed coordinate system with the z-axis pointing out of the
|
||||
plane. This might turn out to be clockwise on your screen, depending on
|
||||
your coordinate system conventions.
|
||||
|
||||

|
||||
|
||||
The polygon members are public, but you should use initialization
|
||||
functions to create a polygon. The initialization functions create
|
||||
normal vectors and perform validation.
|
||||
|
||||
You can create a polygon shape by passing in a vertex array. The maximal
|
||||
size of the array is controlled by `b2_maxPolygonVertices` which has a
|
||||
default value of 8. This is sufficient to describe most convex polygons.
|
||||
|
||||
The `b2PolygonShape::Set` function automatically computes the convex hull
|
||||
and establishes the proper winding order. This function is fast when the
|
||||
number of vertices is low. If you increase `b2_maxPolygonVertices`, then
|
||||
the convex hull computation might become slow. Also note that the convex
|
||||
hull function may eliminate and/or re-order the points you provide.
|
||||
Vertices that are closer than `b2_linearSlop` may be merged.
|
||||
|
||||
```cpp
|
||||
// This defines a triangle in CCW order.
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(0.0f, 0.0f);
|
||||
vertices[1].Set(1.0f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.0f);
|
||||
|
||||
int32 count = 3;
|
||||
b2PolygonShape polygon;
|
||||
polygon.Set(vertices, count);
|
||||
```
|
||||
|
||||
The polygon shape has some convenience functions to create boxes.
|
||||
|
||||
```cpp
|
||||
void SetAsBox(float hx, float hy);
|
||||
void SetAsBox(float hx, float hy, const b2Vec2& center, float angle);
|
||||
```
|
||||
|
||||
Polygons inherit a radius from b2Shape. The radius creates a skin around
|
||||
the polygon. The skin is used in stacking scenarios to keep polygons
|
||||
slightly separated. This allows continuous collision to work against the
|
||||
core polygon.
|
||||
|
||||

|
||||
|
||||
The polygon skin helps prevent tunneling by keeping the polygons
|
||||
separated. This results in small gaps between the shapes. Your visual
|
||||
representation can be larger than the polygon to hide any gaps.
|
||||
|
||||

|
||||
|
||||
Not that polygon skin is only provided to help with continuous collision.
|
||||
The purpose is not to simulate rounded polygons.
|
||||
|
||||
### Edge Shapes
|
||||
Edge shapes are line segments. These are provided to assist in making a
|
||||
free-form static environment for your game. A major limitation of edge
|
||||
shapes is that they can collide with circles and polygons but not with
|
||||
themselves. The collision algorithms used by Box2D require that at least
|
||||
one of two colliding shapes have volume. Edge shapes have no volume, so
|
||||
edge-edge collision is not possible.
|
||||
|
||||
```cpp
|
||||
// This an edge shape.
|
||||
b2Vec2 v1(0.0f, 0.0f);
|
||||
b2Vec2 v2(1.0f, 0.0f);
|
||||
|
||||
b2EdgeShape edge;
|
||||
edge.SetTwoSided(v1, v2);
|
||||
```
|
||||
|
||||
In many cases a game environment is constructed by connecting several
|
||||
edge shapes end-to-end. This can give rise to an unexpected artifact
|
||||
when a polygon slides along the chain of edges. In the figure below we
|
||||
see a box colliding with an internal vertex. These *ghost* collisions
|
||||
are caused when the polygon collides with an internal vertex generating
|
||||
an internal collision normal.
|
||||
|
||||

|
||||
|
||||
If edge1 did not exist this collision would seem fine. With edge1
|
||||
present, the internal collision seems like a bug. But normally when
|
||||
Box2D collides two shapes, it views them in isolation.
|
||||
|
||||
Fortunately, the edge shape provides a mechanism for eliminating ghost
|
||||
collisions by storing the adjacent *ghost* vertices. Box2D uses these
|
||||
ghost vertices to prevent internal collisions.
|
||||
|
||||

|
||||
|
||||
The Box2D algorithm for dealing with ghost collisions only supports
|
||||
one-sided collision. The front face is to the right when looking from the first
|
||||
vertex towards the second vertex. This matches the CCW winding order
|
||||
used by polygons.
|
||||
|
||||
```cpp
|
||||
// This is an edge shape with ghost vertices.
|
||||
b2Vec2 v0(1.7f, 0.0f);
|
||||
b2Vec2 v1(1.0f, 0.25f);
|
||||
b2Vec2 v2(0.0f, 0.0f);
|
||||
b2Vec2 v3(-1.7f, 0.4f);
|
||||
|
||||
b2EdgeShape edge;
|
||||
edge.SetOneSided(v0, v1, v2, v3);
|
||||
```
|
||||
|
||||
In general stitching edges together this way is a bit wasteful and
|
||||
tedious. This brings us to chain shapes.
|
||||
|
||||
### Chain Shapes
|
||||
|
||||
The chain shape provides an efficient way to connect many edges together
|
||||
to construct your static game worlds. Chain shapes automatically
|
||||
eliminate ghost collisions and provide one-sided collision. The collision is
|
||||
one-sided to eliminate ghost collisions.
|
||||
|
||||
If you don't care about ghost collisions, you can just create a bunch of
|
||||
two-sided edge shapes. The efficiency is similar.
|
||||
|
||||
The simplest way to use chain shapes is to create loops. Simply provide an
|
||||
array of vertices.
|
||||
|
||||
```cpp
|
||||
b2Vec2 vs[4];
|
||||
vs[0].Set(1.7f, 0.0f);
|
||||
vs[1].Set(1.0f, 0.25f);
|
||||
vs[2].Set(0.0f, 0.0f);
|
||||
vs[3].Set(-1.7f, 0.4f);
|
||||
|
||||
b2ChainShape chain;
|
||||
chain.CreateLoop(vs, 4);
|
||||
```
|
||||
|
||||
The edge normal depends on the winding order. A counter-clockwise winding order orients the normal outwards and a clockwise winding order orients the normal inwards.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
You may have a scrolling game world and would like to connect several chains together.
|
||||
You can connect chains together using ghost vertices, like we did with b2EdgeShape.
|
||||
|
||||

|
||||
|
||||
```cpp
|
||||
b2ChainShape::CreateChain(const b2Vec2* vertices, int32 count,
|
||||
const b2Vec2& prevVertex, const b2Vec2& nextVertex);
|
||||
```
|
||||
|
||||
Self-intersection of chain shapes is not supported. It might work, it
|
||||
might not. The code that prevents ghost collisions assumes there are no
|
||||
self-intersections of the chain. Also, very close vertices can cause
|
||||
problems. Make sure all your edges are longer than b2_linearSlop (5mm).
|
||||
|
||||

|
||||
|
||||
Each edge in the chain is treated as a child shape and can be accessed
|
||||
by index. When a chain shape is connected to a body, each edge gets its
|
||||
own bounding box in the broad-phase collision tree.
|
||||
|
||||
```cpp
|
||||
// Visit each child edge.
|
||||
for (int32 i = 0; i \< chain.GetChildCount(); ++i)
|
||||
{
|
||||
b2EdgeShape edge;
|
||||
chain.GetChildEdge(&edge, i);
|
||||
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
## Geometric Queries
|
||||
You can perform a couple geometric queries on a single shape.
|
||||
|
||||
### Shape Point Test
|
||||
You can test a point for overlap with a shape. You provide a transform
|
||||
for the shape and a world point.
|
||||
|
||||
```cpp
|
||||
b2Transform transform;
|
||||
transform.SetIdentity();
|
||||
b2Vec2 point(5.0f, 2.0f);
|
||||
|
||||
bool hit = shape->TestPoint(transform, point);
|
||||
```
|
||||
|
||||
Edge and chain shapes always return false, even if the chain is a loop.
|
||||
|
||||
### Shape Ray Cast
|
||||
You can cast a ray at a shape to get the point of first intersection and normal vector. A child index is included for chain shapes because the ray cast will only check a single edge at a time.
|
||||
|
||||
> **Caution**:
|
||||
> No hit will register if the ray starts inside a convex shape like a circle or polygon. This is consistent with Box2D treating convex shapes as solid.
|
||||
>
|
||||
|
||||
```cpp
|
||||
b2Transfrom transform;
|
||||
transform.SetIdentity();
|
||||
|
||||
b2RayCastInput input;
|
||||
input.p1.Set(0.0f, 0.0f);
|
||||
input.p2.Set(1.0f, 0.0f);
|
||||
input.maxFraction = 1.0f;
|
||||
int32 childIndex = 0;
|
||||
|
||||
b2RayCastOutput output;
|
||||
bool hit = shape->RayCast(&output, input, transform, childIndex);
|
||||
|
||||
if (hit)
|
||||
{
|
||||
b2Vec2 hitPoint = input.p1 + output.fraction * (input.p2 -- input.p1);
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
## Pairwise Functions
|
||||
The Collision module contains functions that take a pair of shapes and compute some results. These include:
|
||||
- Overlap
|
||||
- Contact manifolds
|
||||
- Distance
|
||||
- Time of impact
|
||||
|
||||
### Overlap
|
||||
You can test two shapes for overlap using this function:
|
||||
|
||||
```cpp
|
||||
b2Transform xfA = ..., xfB = ...;
|
||||
bool overlap = b2TestOverlap(shapeA, indexA, shapeB, indexB, xfA, xfB);
|
||||
```
|
||||
|
||||
Again you must provide child indices to for the case of chain shapes.
|
||||
|
||||
### Contact Manifolds
|
||||
Box2D has functions to compute contact points for overlapping shapes. If
|
||||
we consider circle-circle or circle-polygon, we can only get one contact
|
||||
point and normal. In the case of polygon-polygon we can get two points.
|
||||
These points share the same normal vector so Box2D groups them into a
|
||||
manifold structure. The contact solver takes advantage of this to
|
||||
improve stacking stability.
|
||||
|
||||

|
||||
|
||||
Normally you don't need to compute contact manifolds directly, however
|
||||
you will likely use the results produced in the simulation.
|
||||
|
||||
The b2Manifold structure holds a normal vector and up to two contact
|
||||
points. The normal and points are held in local coordinates. As a
|
||||
convenience for the contact solver, each point stores the normal and
|
||||
tangential (friction) impulses.
|
||||
|
||||
The data stored in b2Manifold is optimized for internal use. If you need
|
||||
this data, it is usually best to use the b2WorldManifold structure to
|
||||
generate the world coordinates of the contact normal and points. You
|
||||
need to provide a b2Manifold and the shape transforms and radii.
|
||||
|
||||
```cpp
|
||||
b2WorldManifold worldManifold;
|
||||
worldManifold.Initialize(&manifold, transformA, shapeA.m_radius,
|
||||
transformB, shapeB.m_radius);
|
||||
|
||||
for (int32 i = 0; i \< manifold.pointCount; ++i)
|
||||
{
|
||||
b2Vec2 point = worldManifold.points[i];
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Notice that the world manifold uses the point count from the original
|
||||
manifold.
|
||||
|
||||
During simulation shapes may move and the manifolds may change. Points
|
||||
may be added or removed. You can detect this using b2GetPointStates.
|
||||
|
||||
```cpp
|
||||
b2PointState state1[2], state2[2];
|
||||
b2GetPointStates(state1, state2, &manifold1, &manifold2);
|
||||
|
||||
if (state1[0] == b2_removeState)
|
||||
{
|
||||
// process event
|
||||
}
|
||||
```
|
||||
|
||||
### Distance
|
||||
The `b2Distance` function can be used to compute the distance between two
|
||||
shapes. The distance function needs both shapes to be converted into a
|
||||
b2DistanceProxy. There is also some caching used to warm start the
|
||||
distance function for repeated calls.
|
||||
|
||||

|
||||
|
||||
### Time of Impact
|
||||
If two shapes are moving fast, they may *tunnel* through each other in a
|
||||
single time step.
|
||||
|
||||

|
||||
|
||||
The `b2TimeOfImpact` function is used to determine the time when two
|
||||
moving shapes collide. This is called the *time of impact* (TOI). The
|
||||
main purpose of `b2TimeOfImpact` is for tunnel prevention. In particular,
|
||||
it is designed to prevent moving objects from tunneling outside of
|
||||
static level geometry.
|
||||
|
||||
This function accounts for rotation and translation of both shapes,
|
||||
however if the rotations are large enough, then the function may miss a
|
||||
collision. However the function will still report a non-overlapped time
|
||||
and will capture all translational collisions.
|
||||
|
||||
The time of impact function identities an initial separating axis and
|
||||
ensures the shapes do not cross on that axis. This might miss collisions
|
||||
that are clear at the final positions. While this approach may miss some
|
||||
collisions, it is very fast and adequate for tunnel prevention.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
It is difficult to put a restriction on the rotation magnitude. There
|
||||
may be cases where collisions are missed for small rotations. Normally,
|
||||
these missed rotational collisions should not harm game play. They tend
|
||||
to be glancing collisions.
|
||||
|
||||
The function requires two shapes (converted to b2DistanceProxy) and two
|
||||
b2Sweep structures. The sweep structure defines the initial and final
|
||||
transforms of the shapes.
|
||||
|
||||
You can use fixed rotations to perform a *shape cast*. In this case, the
|
||||
time of impact function will not miss any collisions.
|
||||
|
||||
## Dynamic Tree
|
||||
The b2DynamicTree class is used by Box2D to organize large numbers of
|
||||
shapes efficiently. The class does not know about shapes. Instead it
|
||||
operates on axis-aligned bounding boxes (AABBs) with user data pointers.
|
||||
|
||||
The dynamic tree is a hierarchical AABB tree. Each internal node in the
|
||||
tree has two children. A leaf node is a single user AABB. The tree uses
|
||||
rotations to keep the tree balanced, even in the case of degenerate
|
||||
input.
|
||||
|
||||
The tree structure allows for efficient ray casts and region queries.
|
||||
For example, you may have hundreds of shapes in your scene. You could
|
||||
perform a ray cast against the scene in a brute force manner by ray
|
||||
casting each shape. This would be inefficient because it does not take
|
||||
advantage of shapes being spread out. Instead, you can maintain a
|
||||
dynamic tree and perform ray casts against the tree. This traverses the
|
||||
ray through the tree skipping large numbers of shapes.
|
||||
|
||||
A region query uses the tree to find all leaf AABBs that overlap a query
|
||||
AABB. This is faster than a brute force approach because many shapes can
|
||||
be skipped.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Normally you will not use the dynamic tree directly. Rather you will go
|
||||
through the b2World class for ray casts and region queries. If you plan
|
||||
to instantiate your own dynamic tree, you can learn how to use it by
|
||||
looking at how Box2D uses it.
|
||||
|
||||
## Broad-phase
|
||||
Collision processing in a physics step can be divided into narrow-phase
|
||||
and broad-phase. In the narrow-phase we compute contact points between
|
||||
pairs of shapes. Imagine we have N shapes. Using brute force, we would
|
||||
need to perform the narrow-phase for N*N/2 pairs.
|
||||
|
||||
The b2BroadPhase class reduces this load by using a dynamic tree for
|
||||
pair management. This greatly reduces the number of narrow-phase calls.
|
||||
|
||||
Normally you do not interact with the broad-phase directly. Instead,
|
||||
Box2D creates and manages a broad-phase internally. Also, b2BroadPhase
|
||||
is designed with Box2D's simulation loop in mind, so it is likely not
|
||||
suited for other use cases.
|
||||
66
3-mid/physics/implement/box2d/contrib/docs/common.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# Common Module
|
||||
The Common module contains settings, memory management, and vector math.
|
||||
|
||||
## Settings
|
||||
The header b2Settings.h contains:
|
||||
- Types such as int32 and float
|
||||
- Constants
|
||||
- Allocation wrappers
|
||||
- The version number
|
||||
|
||||
### Types
|
||||
Box2D defines various types such as int8, etc. to make it easy
|
||||
to determine the size of structures.
|
||||
|
||||
### Constants
|
||||
Box2D defines several constants. These are all documented in
|
||||
b2Settings.h. Normally you do not need to adjust these constants.
|
||||
|
||||
Box2D uses floating point math for collision and simulation. Due to
|
||||
round-off error some numerical tolerances are defined. Some tolerances
|
||||
are absolute and some are relative. Absolute tolerances use MKS units.
|
||||
|
||||
### Allocation wrappers
|
||||
The settings file defines b2Alloc and b2Free for large allocations. You
|
||||
may forward these calls to your own memory management system.
|
||||
|
||||
### Version
|
||||
The b2Version structure holds the current version so you can query this
|
||||
at run-time.
|
||||
|
||||
## Memory Management
|
||||
A large number of the decisions about the design of Box2D were based on
|
||||
the need for quick and efficient use of memory. In this section I will
|
||||
discuss how and why Box2D allocates memory.
|
||||
|
||||
Box2D tends to allocate a large number of small objects (around 50-300
|
||||
bytes). Using the system heap through malloc or new for small objects is
|
||||
inefficient and can cause fragmentation. Many of these small objects may
|
||||
have a short life span, such as contacts, but can persist for several
|
||||
time steps. So we need an allocator that can efficiently provide heap
|
||||
memory for these objects.
|
||||
|
||||
Box2D's solution is to use a small object allocator (SOA) called
|
||||
b2BlockAllocator. The SOA keeps a number of growable pools of varying
|
||||
sizes. When a request is made for memory, the SOA returns a block of
|
||||
memory that best fits the requested size. When a block is freed, it is
|
||||
returned to the pool. Both of these operations are fast and cause little
|
||||
heap traffic.
|
||||
|
||||
Since Box2D uses a SOA, you should never new or malloc a body, fixture,
|
||||
or joint. However, you do have to allocate a b2World on your own. The
|
||||
b2World class provides factories for you to create bodies, fixtures, and
|
||||
joints. This allows Box2D to use the SOA and hide the gory details from
|
||||
you. Never, call delete or free on a body, fixture, or joint.
|
||||
|
||||
While executing a time step, Box2D needs some temporary workspace
|
||||
memory. For this, it uses a stack allocator called b2StackAllocator to
|
||||
avoid per-step heap allocations. You don't need to interact with the
|
||||
stack allocator, but it's good to know it's there.
|
||||
|
||||
## Math
|
||||
Box2D includes a simple small vector and matrix module. This has been
|
||||
designed to suit the internal needs of Box2D and the API. All the
|
||||
members are exposed, so you may use them freely in your application.
|
||||
|
||||
The math library is kept simple to make Box2D easy to port and maintain.
|
||||
1674
3-mid/physics/implement/box2d/contrib/docs/dynamics.md
Normal file
246
3-mid/physics/implement/box2d/contrib/docs/hello.md
Normal file
@@ -0,0 +1,246 @@
|
||||
# Hello Box2D
|
||||
In the distribution of Box2D is a Hello World project. The program
|
||||
creates a large ground box and a small dynamic box. This code does not
|
||||
contain any graphics. All you will see is text output in the console of
|
||||
the box's position over time.
|
||||
|
||||
This is a good example of how to get up and running with Box2D.
|
||||
|
||||
## Creating a World
|
||||
Every Box2D program begins with the creation of a b2World object.
|
||||
b2World is the physics hub that manages memory, objects, and simulation.
|
||||
You can allocate the physics world on the stack, heap, or data section.
|
||||
|
||||
It is easy to create a Box2D world. First, we define the gravity vector.
|
||||
|
||||
```cpp
|
||||
b2Vec2 gravity(0.0f, -10.0f);
|
||||
```
|
||||
|
||||
Now we create the world object. Note that we are creating the world on
|
||||
the stack, so the world must remain in scope.
|
||||
|
||||
```cpp
|
||||
b2World world(gravity);
|
||||
```
|
||||
|
||||
So now we have our physics world, let's start adding some stuff to it.
|
||||
|
||||
## Creating a Ground Box
|
||||
Bodies are built using the following steps:
|
||||
1. Define a body with position, damping, etc.
|
||||
2. Use the world object to create the body.
|
||||
3. Define fixtures with a shape, friction, density, etc.
|
||||
4. Create fixtures on the body.
|
||||
|
||||
For step 1 we create the ground body. For this we need a body
|
||||
definition. With the body definition we specify the initial position of
|
||||
the ground body.
|
||||
|
||||
```cpp
|
||||
b2BodyDef groundBodyDef;
|
||||
groundBodyDef.position.Set(0.0f, -10.0f);
|
||||
```
|
||||
|
||||
For step 2 the body definition is passed to the world object to create
|
||||
the ground body. The world object does not keep a reference to the body
|
||||
definition. Bodies are static by default. Static bodies don't collide
|
||||
with other static bodies and are immovable.
|
||||
|
||||
```cpp
|
||||
b2Body* groundBody = world.CreateBody(&groundBodyDef);
|
||||
```
|
||||
|
||||
For step 3 we create a ground polygon. We use the SetAsBox shortcut to
|
||||
form the ground polygon into a box shape, with the box centered on the
|
||||
origin of the parent body.
|
||||
|
||||
```cpp
|
||||
b2PolygonShape groundBox;
|
||||
groundBox.SetAsBox(50.0f, 10.0f);
|
||||
```
|
||||
|
||||
The SetAsBox function takes the **half**-**width** and
|
||||
**half**-**height** (extents). So in this case the ground box is 100
|
||||
units wide (x-axis) and 20 units tall (y-axis). Box2D is tuned for
|
||||
meters, kilograms, and seconds. So you can consider the extents to be in
|
||||
meters. Box2D generally works best when objects are the size of typical
|
||||
real world objects. For example, a barrel is about 1 meter tall. Due to
|
||||
the limitations of floating point arithmetic, using Box2D to model the
|
||||
movement of glaciers or dust particles is not a good idea.
|
||||
|
||||
We finish the ground body in step 4 by creating the shape fixture. For
|
||||
this step we have a shortcut. We do not have a need to alter the default
|
||||
fixture material properties, so we can pass the shape directly to the
|
||||
body without creating a fixture definition. Later we will see how to use
|
||||
a fixture definition for customized material properties. The second
|
||||
parameter is the shape density in kilograms per meter squared. A static
|
||||
body has zero mass by definition, so the density is not used in this
|
||||
case.
|
||||
|
||||
```cpp
|
||||
groundBody->CreateFixture(&groundBox, 0.0f);
|
||||
```
|
||||
|
||||
Box2D does not keep a reference to the shape. It clones the data into a
|
||||
new b2Shape object.
|
||||
|
||||
Note that every fixture must have a parent body, even fixtures that are
|
||||
static. However, you can attach all static fixtures to a single static
|
||||
body.
|
||||
|
||||
When you attach a shape to a body using a fixture, the shape's
|
||||
coordinates become local to the body. So when the body moves, so does
|
||||
the shape. A fixture's world transform is inherited from the parent
|
||||
body. A fixture does not have a transform independent of the body. So we
|
||||
don't move a shape around on the body. Moving or modifying a shape that
|
||||
is on a body is not supported. The reason is simple: a body with
|
||||
morphing shapes is not a rigid body, but Box2D is a rigid body engine.
|
||||
Many of the assumptions made in Box2D are based on the rigid body model.
|
||||
If this is violated many things will break
|
||||
|
||||
## Creating a Dynamic Body
|
||||
So now we have a ground body. We can use the same technique to create a
|
||||
dynamic body. The main difference, besides dimensions, is that we must
|
||||
establish the dynamic body's mass properties.
|
||||
|
||||
First we create the body using CreateBody. By default bodies are static,
|
||||
so we should set the b2BodyType at construction time to make the body
|
||||
dynamic.
|
||||
|
||||
```cpp
|
||||
b2BodyDef bodyDef;
|
||||
bodyDef.type = b2_dynamicBody;
|
||||
bodyDef.position.Set(0.0f, 4.0f);
|
||||
b2Body* body = world.CreateBody(&bodyDef);
|
||||
```
|
||||
|
||||
> **Caution**:
|
||||
> You must set the body type to b2_dynamicBody if you want the body to
|
||||
> move in response to forces.
|
||||
|
||||
Next we create and attach a polygon shape using a fixture definition.
|
||||
First we create a box shape:
|
||||
|
||||
```cpp
|
||||
b2PolygonShape dynamicBox;
|
||||
dynamicBox.SetAsBox(1.0f, 1.0f);
|
||||
```
|
||||
|
||||
Next we create a fixture definition using the box. Notice that we set
|
||||
density to 1. The default density is zero. Also, the friction on the
|
||||
shape is set to 0.3.
|
||||
|
||||
```cpp
|
||||
b2FixtureDef fixtureDef;
|
||||
fixtureDef.shape = &dynamicBox;
|
||||
fixtureDef.density = 1.0f;
|
||||
fixtureDef.friction = 0.3f;
|
||||
```
|
||||
|
||||
> **Caution**:
|
||||
> A dynamic body should have at least one fixture with a non-zero density.
|
||||
> Otherwise you will get strange behavior.
|
||||
|
||||
Using the fixture definition we can now create the fixture. This
|
||||
automatically updates the mass of the body. You can add as many fixtures
|
||||
as you like to a body. Each one contributes to the total mass.
|
||||
|
||||
```cpp
|
||||
body->CreateFixture(&fixtureDef);
|
||||
```
|
||||
|
||||
That's it for initialization. We are now ready to begin simulating.
|
||||
|
||||
## Simulating the World
|
||||
So we have initialized the ground box and a dynamic box. Now we are
|
||||
ready to set Newton loose to do his thing. We just have a couple more
|
||||
issues to consider.
|
||||
|
||||
Box2D uses a computational algorithm called an integrator. Integrators
|
||||
simulate the physics equations at discrete points of time. This goes
|
||||
along with the traditional game loop where we essentially have a flip
|
||||
book of movement on the screen. So we need to pick a time step for
|
||||
Box2D. Generally physics engines for games like a time step at least as
|
||||
fast as 60Hz or 1/60 seconds. You can get away with larger time steps,
|
||||
but you will have to be more careful about setting up the definitions
|
||||
for your world. We also don't like the time step to change much. A
|
||||
variable time step produces variable results, which makes it difficult
|
||||
to debug. So don't tie the time step to your frame rate (unless you
|
||||
really, really have to). Without further ado, here is the time step.
|
||||
|
||||
```cpp
|
||||
float timeStep = 1.0f / 60.0f;
|
||||
```
|
||||
|
||||
In addition to the integrator, Box2D also uses a larger bit of code
|
||||
called a constraint solver. The constraint solver solves all the
|
||||
constraints in the simulation, one at a time. A single constraint can be
|
||||
solved perfectly. However, when we solve one constraint, we slightly
|
||||
disrupt other constraints. To get a good solution, we need to iterate
|
||||
over all constraints a number of times.
|
||||
|
||||
There are two phases in the constraint solver: a velocity phase and a
|
||||
position phase. In the velocity phase the solver computes the impulses
|
||||
necessary for the bodies to move correctly. In the position phase the
|
||||
solver adjusts the positions of the bodies to reduce overlap and joint
|
||||
detachment. Each phase has its own iteration count. In addition, the
|
||||
position phase may exit iterations early if the errors are small.
|
||||
|
||||
The suggested iteration count for Box2D is 8 for velocity and 3 for
|
||||
position. You can tune this number to your liking, just keep in mind
|
||||
that this has a trade-off between performance and accuracy. Using fewer
|
||||
iterations increases performance but accuracy suffers. Likewise, using
|
||||
more iterations decreases performance but improves the quality of your
|
||||
simulation. For this simple example, we don't need much iteration. Here
|
||||
are our chosen iteration counts.
|
||||
|
||||
```cpp
|
||||
int32 velocityIterations = 6;
|
||||
int32 positionIterations = 2;
|
||||
```
|
||||
|
||||
Note that the time step and the iteration count are completely
|
||||
unrelated. An iteration is not a sub-step. One solver iteration is a
|
||||
single pass over all the constraints within a time step. You can have
|
||||
multiple passes over the constraints within a single time step.
|
||||
|
||||
We are now ready to begin the simulation loop. In your game the
|
||||
simulation loop can be merged with your game loop. In each pass through
|
||||
your game loop you call b2World::Step. Just one call is usually enough,
|
||||
depending on your frame rate and your physics time step.
|
||||
|
||||
The Hello World program was designed to be simple, so it has no
|
||||
graphical output. The code prints out the position and rotation of the
|
||||
dynamic body. Here is the simulation loop that simulates 60 time steps
|
||||
for a total of 1 second of simulated time.
|
||||
|
||||
```cpp
|
||||
for (int32 i = 0; i < 60; ++i)
|
||||
{
|
||||
world.Step(timeStep, velocityIterations, positionIterations);
|
||||
b2Vec2 position = body->GetPosition();
|
||||
float angle = body->GetAngle();
|
||||
printf("%4.2f %4.2f %4.2f\n", position.x, position.y, angle);
|
||||
}
|
||||
```
|
||||
|
||||
The output shows the box falling and landing on the ground box. Your
|
||||
output should look like this:
|
||||
|
||||
```
|
||||
0.00 4.00 0.00
|
||||
0.00 3.99 0.00
|
||||
0.00 3.98 0.00
|
||||
...
|
||||
0.00 1.25 0.00
|
||||
0.00 1.13 0.00
|
||||
0.00 1.01 0.00
|
||||
```
|
||||
|
||||
## Cleanup
|
||||
When a world leaves scope or is deleted by calling delete on a pointer,
|
||||
all the memory reserved for bodies, fixtures, and joints is freed. This
|
||||
is done to improve performance and make your life easier. However, you
|
||||
will need to nullify any body, fixture, or joint pointers you have
|
||||
because they will become invalid.
|
||||
|
After Width: | Height: | Size: 912 B |
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="296.5"
|
||||
height="142.84351"
|
||||
id="svg4080"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="captured.svg"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\captured.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4082">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective4088" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4142136"
|
||||
inkscape:cx="-105.19711"
|
||||
inkscape:cy="-99.626528"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1138"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata4085">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-245,-431.01868)">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4090"
|
||||
width="295.5"
|
||||
height="17"
|
||||
x="245.5"
|
||||
y="556.36218" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4602"
|
||||
width="8"
|
||||
height="134"
|
||||
x="565.5022"
|
||||
y="92.054398"
|
||||
transform="rotate(39.650005)" />
|
||||
<rect
|
||||
y="502.45367"
|
||||
x="298.04913"
|
||||
height="134"
|
||||
width="8"
|
||||
id="rect4604"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
transform="rotate(-11.210987)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="328"
|
||||
y="465.36218"
|
||||
id="text4608"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4610"
|
||||
x="328"
|
||||
y="465.36218"
|
||||
style="font-size:12px;line-height:1.25">t=0</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="419.5"
|
||||
y="465.33875"
|
||||
id="text4612"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4614"
|
||||
x="419.5"
|
||||
y="465.33875"
|
||||
style="font-size:12px;line-height:1.25">t=1</tspan></text>
|
||||
<rect
|
||||
transform="rotate(30.564716)"
|
||||
y="182.57234"
|
||||
x="547.54456"
|
||||
height="134"
|
||||
width="8"
|
||||
id="rect2822"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:1, 2;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
@@ -0,0 +1,310 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="385.42209"
|
||||
height="201.11388"
|
||||
id="svg9044"
|
||||
version="1.1"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="chain_loop.svg">
|
||||
<defs
|
||||
id="defs9046">
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="Arrow1Mend"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend">
|
||||
<path
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
style="fill:#767676;fill-opacity:1;fill-rule:evenodd;stroke:#767676;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path911" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="Arrow2Lend"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow2Lend">
|
||||
<path
|
||||
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
style="fill:#767676;fill-opacity:1;fill-rule:evenodd;stroke:#767676;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="path923" />
|
||||
</marker>
|
||||
<linearGradient
|
||||
id="linearGradient9562"
|
||||
osb:paint="solid">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop9564" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.979899"
|
||||
inkscape:cx="168.58169"
|
||||
inkscape:cy="-21.83025"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1359"
|
||||
inkscape:window-height="1041"
|
||||
inkscape:window-x="150"
|
||||
inkscape:window-y="60"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0" />
|
||||
<metadata
|
||||
id="metadata9049">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-194.29952,-275.90446)">
|
||||
<path
|
||||
id="path848"
|
||||
d="m 229.2724,347.82772 0.71428,70 60,54.28571 125,-30 122.14286,32.14286 39.28571,-103.57143 -49.28571,-92.14286 -97.14286,47.85715 -104.28571,-47.14286 -128.57143,2.85714 z"
|
||||
style="fill:none;stroke:#767676;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path6867"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="228.97542"
|
||||
cy="348.89066"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
id="path9620"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
cx="230.76782"
|
||||
cy="418.05508"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9622"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="290.03033"
|
||||
cy="471.81509"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
id="path9624"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
cx="413.70074"
|
||||
cy="443.18237"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9626"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="430.03122"
|
||||
cy="326.42294"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9628"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="536.83978"
|
||||
cy="473.99295"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
id="path9630"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
cx="526.38983"
|
||||
cy="278.92984"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9632"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="576.69623"
|
||||
cy="371.42444"
|
||||
r="2.5253813" />
|
||||
<path
|
||||
id="path850"
|
||||
d="m 253.47669,467.02956 v 0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="279.28699"
|
||||
cx="324.60413"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="circle852"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<circle
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
id="circle854"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
cx="197.32491"
|
||||
cy="281.81238"
|
||||
r="2.5253813" />
|
||||
<text
|
||||
id="text862"
|
||||
y="344.07681"
|
||||
x="425.94608"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="344.07681"
|
||||
x="425.94608"
|
||||
id="tspan860"
|
||||
sodipodi:role="line">1</tspan></text>
|
||||
<text
|
||||
id="text866"
|
||||
y="295.57101"
|
||||
x="519.9389"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="295.57101"
|
||||
x="519.9389"
|
||||
id="tspan864"
|
||||
sodipodi:role="line">2</tspan></text>
|
||||
<text
|
||||
id="text870"
|
||||
y="376.38321"
|
||||
x="558.82983"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="376.38321"
|
||||
x="558.82983"
|
||||
id="tspan868"
|
||||
sodipodi:role="line">3</tspan></text>
|
||||
<text
|
||||
id="text874"
|
||||
y="463.25635"
|
||||
x="524.98969"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="463.25635"
|
||||
x="524.98969"
|
||||
id="tspan872"
|
||||
sodipodi:role="line">4</tspan></text>
|
||||
<text
|
||||
id="text878"
|
||||
y="430.93146"
|
||||
x="408.82214"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="430.93146"
|
||||
x="408.82214"
|
||||
id="tspan876"
|
||||
sodipodi:role="line">5</tspan></text>
|
||||
<text
|
||||
id="text882"
|
||||
y="460.73096"
|
||||
x="289.11905"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="460.73096"
|
||||
x="289.11905"
|
||||
id="tspan880"
|
||||
sodipodi:role="line">6</tspan></text>
|
||||
<text
|
||||
id="text886"
|
||||
y="417.2944"
|
||||
x="241.1368"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="417.2944"
|
||||
x="241.1368"
|
||||
id="tspan884"
|
||||
sodipodi:role="line">7</tspan></text>
|
||||
<text
|
||||
id="text890"
|
||||
y="354.15985"
|
||||
x="236.08604"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="354.15985"
|
||||
x="236.08604"
|
||||
id="tspan888"
|
||||
sodipodi:role="line">8</tspan></text>
|
||||
<text
|
||||
id="text894"
|
||||
y="299.6116"
|
||||
x="212.34746"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="299.6116"
|
||||
x="212.34746"
|
||||
id="tspan892"
|
||||
sodipodi:role="line">9</tspan></text>
|
||||
<text
|
||||
id="text898"
|
||||
y="301.63193"
|
||||
x="313.36273"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="301.63193"
|
||||
x="313.36273"
|
||||
id="tspan896"
|
||||
sodipodi:role="line">10</tspan></text>
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
id="path900"
|
||||
d="m 479.45824,302.18069 17.90441,37.1805"
|
||||
style="fill:none;stroke:#767676;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
|
||||
<text
|
||||
id="text1200"
|
||||
y="354.91748"
|
||||
x="473.72443"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="354.91748"
|
||||
x="473.72443"
|
||||
id="tspan1198"
|
||||
sodipodi:role="line">normal</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,310 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="chain_loop_reversed.svg"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
version="1.1"
|
||||
id="svg9044"
|
||||
height="204.77463"
|
||||
width="385.42209">
|
||||
<defs
|
||||
id="defs9046">
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Mend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path911"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill:#767676;fill-opacity:1;fill-rule:evenodd;stroke:#767676;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path923"
|
||||
style="fill:#767676;fill-opacity:1;fill-rule:evenodd;stroke:#767676;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
|
||||
</marker>
|
||||
<linearGradient
|
||||
osb:paint="solid"
|
||||
id="linearGradient9562">
|
||||
<stop
|
||||
id="stop9564"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:document-rotation="0"
|
||||
fit-margin-bottom="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-top="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="60"
|
||||
inkscape:window-x="150"
|
||||
inkscape:window-height="1041"
|
||||
inkscape:window-width="1359"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-units="px"
|
||||
inkscape:cy="79.63377"
|
||||
inkscape:cx="82.971281"
|
||||
inkscape:zoom="2.8"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base" />
|
||||
<metadata
|
||||
id="metadata9049">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-194.29952,-272.2437)"
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Layer 1">
|
||||
<path
|
||||
style="fill:none;stroke:#767676;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 229.2724,347.82772 0.71428,70 60,54.28571 125,-30 122.14286,32.14286 39.28571,-103.57143 -49.28571,-92.14286 -97.14286,47.85715 -104.28571,-47.14286 -128.57143,2.85714 z"
|
||||
id="path848" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="348.89066"
|
||||
cx="228.97542"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
id="path6867"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="418.05508"
|
||||
cx="230.76782"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9620"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="471.81509"
|
||||
cx="290.03033"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
id="path9622"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="443.18237"
|
||||
cx="413.70074"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9624"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="326.42294"
|
||||
cx="430.03122"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
id="path9626"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="473.99295"
|
||||
cx="536.83978"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
id="path9628"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="278.92984"
|
||||
cx="526.38983"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9630"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="371.42444"
|
||||
cx="576.69623"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
id="path9632"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 253.47669,467.02956 v 0"
|
||||
id="path850" />
|
||||
<circle
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
id="circle852"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
cx="324.60413"
|
||||
cy="279.28699"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="281.81238"
|
||||
cx="197.32491"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="circle854"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="425.94608"
|
||||
y="344.07681"
|
||||
id="text862"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan860"
|
||||
x="425.94608"
|
||||
y="344.07681">1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="316.62775"
|
||||
y="298.60147"
|
||||
id="text866"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan864"
|
||||
x="316.62775"
|
||||
y="298.60147">2</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="211.25813"
|
||||
y="296.85907"
|
||||
id="text870"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan868"
|
||||
x="211.25813"
|
||||
y="296.85907">3</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="236.15477"
|
||||
y="352.01703"
|
||||
id="text874"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan872"
|
||||
x="236.15477"
|
||||
y="352.01703">4</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="239.87413"
|
||||
y="418.30457"
|
||||
id="text878"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan876"
|
||||
x="239.87413"
|
||||
y="418.30457">5</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="289.11905"
|
||||
y="460.73096"
|
||||
id="text882"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan880"
|
||||
x="289.11905"
|
||||
y="460.73096">6</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="413.11526"
|
||||
y="434.21445"
|
||||
id="text886"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan884"
|
||||
x="413.11526"
|
||||
y="434.21445">7</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="528.52521"
|
||||
y="464.51904"
|
||||
id="text890"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan888"
|
||||
x="528.52521"
|
||||
y="464.51904">8</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="558.0722"
|
||||
y="376.88828"
|
||||
id="text894"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan892"
|
||||
x="558.0722"
|
||||
y="376.88828">9</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="513.62549"
|
||||
y="300.36923"
|
||||
id="text898"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan896"
|
||||
x="513.62549"
|
||||
y="300.36923">10</tspan></text>
|
||||
<path
|
||||
style="fill:none;stroke:#767676;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
|
||||
d="M 383.79198,305.30043 397.6917,274.04436"
|
||||
id="path900"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="400.48837"
|
||||
y="290.26773"
|
||||
id="text1200"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1198"
|
||||
x="400.48837"
|
||||
y="290.26773">normal</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,198 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="chain_shape.svg"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
version="1.1"
|
||||
id="svg9044"
|
||||
height="225.19205"
|
||||
width="402.73563">
|
||||
<defs
|
||||
id="defs9046">
|
||||
<linearGradient
|
||||
osb:paint="solid"
|
||||
id="linearGradient9562">
|
||||
<stop
|
||||
id="stop9564"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:document-rotation="0"
|
||||
fit-margin-bottom="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-top="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="60"
|
||||
inkscape:window-x="150"
|
||||
inkscape:window-height="1041"
|
||||
inkscape:window-width="1359"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-units="px"
|
||||
inkscape:cy="186.37568"
|
||||
inkscape:cx="193.56931"
|
||||
inkscape:zoom="2.8"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base" />
|
||||
<metadata
|
||||
id="metadata9049">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-183.55811,-264.25629)"
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Layer 1">
|
||||
<path
|
||||
sodipodi:nodetypes="csccc"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path9052"
|
||||
d="m 323.77573,448.72257 c 17.00369,9.32859 68.03674,37.35768 70.04901,38.08934 4.02453,1.46331 83.91263,-37.80722 83.91263,-37.80722 l 105.40088,-34.7384 -76.62636,-97.92976"
|
||||
style="fill:none;stroke:#767676;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path845"
|
||||
d="m 506.51189,316.33653 58.7583,-35.85104"
|
||||
style="fill:none;stroke:#767676;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<path
|
||||
id="path847"
|
||||
d="M 253.47669,467.02956 187.05916,434.70468"
|
||||
style="fill:none;stroke:#767676;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<path
|
||||
id="path849"
|
||||
d="m 253.47669,467.02956 70.29904,-18.30699"
|
||||
style="fill:none;stroke:#767676;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
transform="translate(-54.372373,-177.18205)"
|
||||
id="path6867"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9620"
|
||||
transform="translate(11.817253,-145.14071)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
transform="translate(81.49165,-163.51344)"
|
||||
id="path9622"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9624"
|
||||
transform="translate(235.87634,-162.86043)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
transform="translate(152.3854,-125.51272)"
|
||||
id="path9626"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
transform="translate(341.33682,-197.58559)"
|
||||
id="path9628"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9630"
|
||||
transform="translate(265.17257,-295.86296)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
transform="translate(323.65299,-332.43511)"
|
||||
id="path9632"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<text
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
id="text9634"
|
||||
y="426.1131"
|
||||
x="183.1958"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:14px;line-height:1.25"
|
||||
y="426.1131"
|
||||
x="183.1958"
|
||||
id="tspan9636"
|
||||
sodipodi:role="line">ghost</tspan></text>
|
||||
<text
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Chain1.png"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="549.41998"
|
||||
y="273.77875"
|
||||
id="text9638"><tspan
|
||||
style="font-size:14px;line-height:1.25"
|
||||
sodipodi:role="line"
|
||||
id="tspan9640"
|
||||
x="549.41998"
|
||||
y="273.77875">ghost</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
BIN
3-mid/physics/implement/box2d/contrib/docs/images/debug_draw.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
178
3-mid/physics/implement/box2d/contrib/docs/images/distance.svg
Normal file
@@ -0,0 +1,178 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="271.28311"
|
||||
height="111.33035"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="distance.svg"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\distance.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3696"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(-0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3690"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective10" />
|
||||
<inkscape:perspective
|
||||
id="perspective2830"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2852"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3648"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective4310"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mend-0"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3696-9"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(-0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
id="perspective4342"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2"
|
||||
inkscape:cx="26.976981"
|
||||
inkscape:cy="-103.40251"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1467"
|
||||
inkscape:window-height="1068"
|
||||
inkscape:window-x="196"
|
||||
inkscape:window-y="16"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-209.30148,-534.31362)">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1.21355975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.21355975, 2.4271195;stroke-dashoffset:0;stroke-opacity:1;marker-end:none"
|
||||
d="m 388,603.62582 -62,0.47272"
|
||||
id="path3664"
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 387,546.86218 79,-1 14,56 -91,43 z"
|
||||
id="path2816"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 246.19848,535.12334 80.64122,69.26034 -116.72691,8.47526 z"
|
||||
id="path2818"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="fill:#00ff00;fill-opacity:1;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect2820"
|
||||
width="7"
|
||||
height="7"
|
||||
x="385.5"
|
||||
y="599.36218" />
|
||||
<rect
|
||||
style="fill:#00ff00;fill-opacity:1;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect2820-1"
|
||||
width="7"
|
||||
height="7"
|
||||
x="323"
|
||||
y="599.86218" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
BIN
3-mid/physics/implement/box2d/contrib/docs/images/gear_joint.gif
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,237 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="262.62952"
|
||||
height="103.72113"
|
||||
id="svg6349"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="ghost_collision.svg">
|
||||
<defs
|
||||
id="defs6351">
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Send"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Send"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path4500"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Mend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path4494"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path4488"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="TriangleOutL"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="TriangleOutL"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path4628"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="scale(0.8)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8"
|
||||
inkscape:cx="16.976506"
|
||||
inkscape:cy="8.3597391"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1413"
|
||||
inkscape:window-height="1038"
|
||||
inkscape:window-x="408"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata6354">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-286.8884,-532.20758)">
|
||||
<path
|
||||
style="fill:none;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 289.91378,613.4509 255.55849,1.51523"
|
||||
id="path6357"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path6867"
|
||||
transform="translate(47.982246,1.5152288)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="241.93153"
|
||||
cy="611.93567"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path6867-1"
|
||||
transform="translate(181.32238,2.525385)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="241.93153"
|
||||
cy="611.93567"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path6867-1-9"
|
||||
transform="translate(304.561,3.5355374)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="241.93153"
|
||||
cy="611.93567"
|
||||
r="2.5253813" />
|
||||
<rect
|
||||
style="fill:#d7e3f4;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect6905"
|
||||
width="47.982246"
|
||||
height="41.921329"
|
||||
x="375.23105"
|
||||
y="569.50922"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Send)"
|
||||
d="m 373.75644,552.33667 h 51.0127"
|
||||
id="path6907"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend)"
|
||||
d="M 454.54834,609.91537 H 426.26407"
|
||||
id="path7843"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="370.22092"
|
||||
y="541.73004"
|
||||
id="text8977"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan8979"
|
||||
x="370.22092"
|
||||
y="541.73004"
|
||||
style="font-size:14px;line-height:1.25">box motion</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="439.28574"
|
||||
y="606.29077"
|
||||
id="text8981"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan8983"
|
||||
x="439.28574"
|
||||
y="606.29077"
|
||||
style="font-size:14px;line-height:1.25">internal normal</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="328.92856"
|
||||
y="633.43359"
|
||||
id="text8985"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan8987"
|
||||
x="328.92856"
|
||||
y="633.43359"
|
||||
style="font-size:14px;line-height:1.25">edge1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="460.78262"
|
||||
y="633.36218"
|
||||
id="text8985-3"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"><tspan
|
||||
sodipodi:role="line"
|
||||
x="460.78262"
|
||||
y="633.36218"
|
||||
id="tspan9010"
|
||||
style="font-size:14px;line-height:1.25">edge2 </tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.8 KiB |
@@ -0,0 +1,265 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="ghost_vertices.svg"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
version="1.1"
|
||||
id="svg6349"
|
||||
height="95.10083"
|
||||
width="249.00421">
|
||||
<defs
|
||||
id="defs6351">
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow1Send"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Send">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path4500" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow1Mend"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path4494" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow1Lend"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Lend">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path4488" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="TriangleOutL"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="TriangleOutL">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="scale(0.8)"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
id="path4628" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
lock-margins="true"
|
||||
inkscape:document-rotation="0"
|
||||
fit-margin-bottom="0.5"
|
||||
fit-margin-right="0.5"
|
||||
fit-margin-left="0.5"
|
||||
fit-margin-top="0.5"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="66"
|
||||
inkscape:window-x="1946"
|
||||
inkscape:window-height="1038"
|
||||
inkscape:window-width="1413"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-units="px"
|
||||
inkscape:cy="-1.4711953"
|
||||
inkscape:cx="34.170039"
|
||||
inkscape:zoom="2.8"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base" />
|
||||
<metadata
|
||||
id="metadata6354">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-269.69485,-530.99694)"
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Layer 1">
|
||||
<path
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path9018"
|
||||
d="m 291.78571,534.50504 66.42858,52.5"
|
||||
style="fill:none;stroke:#7d7d7d;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path9020"
|
||||
d="m 358.21429,586.6479 80.71429,-26.07143"
|
||||
style="fill:none;stroke:#7d7d7d;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path9022"
|
||||
d="m 438.57143,560.57647 56.78572,32.14286"
|
||||
style="fill:none;stroke:#7d7d7d;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
transform="translate(49.053675,-77.413343)"
|
||||
id="path6867"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
transform="translate(116.32238,-24.974615)"
|
||||
id="path6867-1"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9012"
|
||||
transform="translate(254.91814,-18.60732)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<circle
|
||||
r="2.5253813"
|
||||
cy="611.93567"
|
||||
cx="241.93153"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
transform="translate(197.06099,-51.10732)"
|
||||
id="path9014"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<text
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
id="text9024"
|
||||
y="610.57648"
|
||||
x="492.14285"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:14px;line-height:1.25"
|
||||
y="610.57648"
|
||||
x="492.14285"
|
||||
id="tspan9026"
|
||||
sodipodi:role="line">v0</tspan></text>
|
||||
<text
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="432.5"
|
||||
y="577.36218"
|
||||
id="text9028"><tspan
|
||||
style="font-size:14px;line-height:1.25"
|
||||
sodipodi:role="line"
|
||||
id="tspan9030"
|
||||
x="432.5"
|
||||
y="577.36218">v1</tspan></text>
|
||||
<text
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
id="text9032"
|
||||
y="602.7193"
|
||||
x="349.64285"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:14px;line-height:1.25"
|
||||
y="602.7193"
|
||||
x="349.64285"
|
||||
id="tspan9034"
|
||||
sodipodi:role="line">v2</tspan></text>
|
||||
<text
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="283.92856"
|
||||
y="552.00507"
|
||||
id="text9036"><tspan
|
||||
style="font-size:14px;line-height:1.25"
|
||||
sodipodi:role="line"
|
||||
id="tspan9038"
|
||||
x="283.92856"
|
||||
y="552.00507">v3</tspan></text>
|
||||
<text
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
id="text9040"
|
||||
y="565.93359"
|
||||
x="269.28568"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:14px;line-height:1.25"
|
||||
y="565.93359"
|
||||
x="269.28568"
|
||||
id="tspan9042"
|
||||
sodipodi:role="line">(ghost)</tspan></text>
|
||||
<text
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\GhostVertices.png"
|
||||
id="text9040-2"
|
||||
y="623.10266"
|
||||
x="479.21371"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:14px;line-height:1.25"
|
||||
y="623.10266"
|
||||
x="479.21371"
|
||||
id="tspan9042-0"
|
||||
sodipodi:role="line">(ghost)</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
126
3-mid/physics/implement/box2d/contrib/docs/images/logo.svg
Normal file
@@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="23.160606mm"
|
||||
height="19.770294mm"
|
||||
viewBox="0 0 23.160606 19.770294"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
sodipodi:docname="Logo.svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8"
|
||||
inkscape:cx="91.164312"
|
||||
inkscape:cy="2.0199043"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-to-guides="false"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:object-nodes="false"
|
||||
inkscape:snap-nodes="false"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1377"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-4.3336132,-2.5558382)">
|
||||
<rect
|
||||
id="rect3724"
|
||||
width="5.3740902"
|
||||
height="4.9586015"
|
||||
x="12.262583"
|
||||
y="10.94324"
|
||||
style="fill:none;stroke:#30aebf;stroke-width:0.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:export-xdpi="208.37"
|
||||
inkscape:export-ydpi="208.37" />
|
||||
<rect
|
||||
id="rect3724-5"
|
||||
width="5.3740902"
|
||||
height="4.9586015"
|
||||
x="15.178779"
|
||||
y="16.447105"
|
||||
style="fill:none;stroke:#30aebf;stroke-width:0.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
id="rect3724-7"
|
||||
width="5.3740902"
|
||||
height="4.9586015"
|
||||
x="9.251893"
|
||||
y="16.447105"
|
||||
style="fill:none;stroke:#30aebf;stroke-width:0.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#8cc924;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 4.3348411,22.026134 21.1823269,-0.0867"
|
||||
id="path4552"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="208.37"
|
||||
inkscape:export-ydpi="208.37" />
|
||||
<circle
|
||||
style="fill:none;stroke:#dc3132;stroke-width:0.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4554"
|
||||
cx="21.845764"
|
||||
cy="8.3044558"
|
||||
r="2.5724692"
|
||||
inkscape:export-xdpi="208.37"
|
||||
inkscape:export-ydpi="208.37" />
|
||||
<path
|
||||
style="fill:none;stroke:#eb8788;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 22.547358,4.9301842 2.104747,-2.07134"
|
||||
id="path4556"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="208.37"
|
||||
inkscape:export-ydpi="208.37" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4558"
|
||||
d="m 24.184383,5.7319842 2.104747,-2.07134"
|
||||
style="fill:none;stroke:#eb8788;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:export-xdpi="208.37"
|
||||
inkscape:export-ydpi="208.37" />
|
||||
<path
|
||||
style="fill:none;stroke:#eb8788;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 25.086418,7.1685542 2.104747,-2.07134"
|
||||
id="path4562"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="208.37"
|
||||
inkscape:export-ydpi="208.37" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
256
3-mid/physics/implement/box2d/contrib/docs/images/manifolds.svg
Normal file
@@ -0,0 +1,256 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="278.64941"
|
||||
height="199.68138"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="manifolds.svg"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3696"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(-0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3690"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective10" />
|
||||
<inkscape:perspective
|
||||
id="perspective2830"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2852"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3648"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective4310"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mend-0"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3696-9"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(-0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
id="perspective4342"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2"
|
||||
inkscape:cx="107.80664"
|
||||
inkscape:cy="78.632812"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1097"
|
||||
inkscape:window-height="1068"
|
||||
inkscape:window-x="214"
|
||||
inkscape:window-y="23"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-208.19336,-534.31362)">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 227,602.36218 79,-1 14,56 -91,43 z"
|
||||
id="path2816"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="180.11958"
|
||||
inkscape:export-ydpi="180.11958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 246.19848,535.12334 80.64122,69.26034 -116.72691,8.47526 z"
|
||||
id="path2818"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="180.11958"
|
||||
inkscape:export-ydpi="180.11958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="fill:#00ff00;fill-opacity:1;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect2820"
|
||||
width="7"
|
||||
height="7"
|
||||
x="224"
|
||||
y="608.36218"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="180.11958"
|
||||
inkscape:export-ydpi="180.11958" />
|
||||
<rect
|
||||
style="fill:#00ff00;fill-opacity:1;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect2820-1"
|
||||
width="7"
|
||||
height="7"
|
||||
x="303.5"
|
||||
y="602.36218"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="180.11958"
|
||||
inkscape:export-ydpi="180.11958" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 386,601.86218 79,-1 14,56 -91,43 z"
|
||||
id="path2816-7"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="180.11958"
|
||||
inkscape:export-ydpi="180.11958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path2866"
|
||||
transform="translate(-2,14)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="180.11958"
|
||||
inkscape:export-ydpi="180.11958"
|
||||
cx="428.75"
|
||||
cy="556.61218"
|
||||
r="34.75" />
|
||||
<rect
|
||||
style="fill:#00ff00;fill-opacity:1;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect2820-4"
|
||||
width="7"
|
||||
height="7"
|
||||
x="424.5"
|
||||
y="602.86218"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="180.11958"
|
||||
inkscape:export-ydpi="180.11958" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
|
||||
d="m 264,601.36218 v -26.5"
|
||||
id="path3664"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="180.11958"
|
||||
inkscape:export-ydpi="180.11958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
|
||||
d="m 427.50961,601.02437 v -26.5"
|
||||
id="path3664-4"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="180.11958"
|
||||
inkscape:export-ydpi="180.11958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="208"
|
||||
y="731.86218"
|
||||
id="text4330"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="180.11958"
|
||||
inkscape:export-ydpi="180.11958"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4332"
|
||||
x="208"
|
||||
y="731.86218"
|
||||
style="font-size:12px;line-height:1.25">two points, one normal</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="378.83105"
|
||||
y="731.86218"
|
||||
id="text4330-8"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\manifolds.png"
|
||||
inkscape:export-xdpi="180.11958"
|
||||
inkscape:export-ydpi="180.11958"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4332-8"
|
||||
x="378.83105"
|
||||
y="731.86218"
|
||||
style="font-size:12px;line-height:1.25">one point, one normal</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.9 KiB |
153
3-mid/physics/implement/box2d/contrib/docs/images/missed_toi.svg
Normal file
@@ -0,0 +1,153 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="296.5"
|
||||
height="148.6571"
|
||||
id="svg4080"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="missed_toi.svg"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\missed.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4082">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3626"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(-0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective4088" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2"
|
||||
inkscape:cx="-118.5"
|
||||
inkscape:cy="37.499998"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1138"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata4085">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-245,-425.20508)">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4090"
|
||||
width="295.5"
|
||||
height="17"
|
||||
x="245.5"
|
||||
y="556.36218" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4602"
|
||||
width="8"
|
||||
height="134"
|
||||
x="506.24817"
|
||||
y="262.38239"
|
||||
transform="rotate(20.920228)" />
|
||||
<rect
|
||||
y="542.29114"
|
||||
x="223.04268"
|
||||
height="134"
|
||||
width="8"
|
||||
id="rect4604"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
transform="rotate(-20.611746)" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4606"
|
||||
width="8"
|
||||
height="134"
|
||||
x="389"
|
||||
y="429.36218" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="340.5"
|
||||
y="466.36218"
|
||||
id="text4608"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4610"
|
||||
x="340.5"
|
||||
y="466.36218"
|
||||
style="font-size:12px;line-height:1.25">t=0</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="432.5"
|
||||
y="466.33875"
|
||||
id="text4612"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4614"
|
||||
x="432.5"
|
||||
y="466.33875"
|
||||
style="font-size:12px;line-height:1.25">t=1</tspan></text>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
|
||||
d="m 500.5,556.36218 v -40.5"
|
||||
id="path2822"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="462.5"
|
||||
y="507.86218"
|
||||
id="text4044"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4046"
|
||||
x="462.5"
|
||||
y="507.86218"
|
||||
style="font-size:12px;line-height:1.25">separating axis</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
222
3-mid/physics/implement/box2d/contrib/docs/images/modules.svg
Normal file
@@ -0,0 +1,222 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="216.625"
|
||||
height="229"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="modules.svg">
|
||||
<defs
|
||||
id="defs4">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3683"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective10" />
|
||||
<inkscape:perspective
|
||||
id="perspective2838"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2860"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2888"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2845"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2867"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="-354.80283"
|
||||
inkscape:cy="43.76881"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1138"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-183,-324.36218)">
|
||||
<rect
|
||||
style="fill:#d7e3f4;fill-opacity:1;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect2820-7-9-1-7"
|
||||
width="120"
|
||||
height="46"
|
||||
x="183"
|
||||
y="416.36218"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\modules.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="fill:#d7e3f4;fill-opacity:1;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect2820-7-9-1"
|
||||
width="120"
|
||||
height="46"
|
||||
x="279.625"
|
||||
y="324.36218"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\modules.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="310.13672"
|
||||
y="351.92664"
|
||||
id="text2826"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\modules.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2828"
|
||||
x="310.13672"
|
||||
y="351.92664"
|
||||
style="font-size:16px;line-height:1.25">Common</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="215.79297"
|
||||
y="442.92664"
|
||||
id="text2826-4"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\modules.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2828-0"
|
||||
x="215.79297"
|
||||
y="442.92664"
|
||||
style="font-size:16px;line-height:1.25">Collision</tspan></text>
|
||||
<rect
|
||||
style="fill:#d7e3f4;fill-opacity:1;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect2820-7-9"
|
||||
width="120"
|
||||
height="46"
|
||||
x="279.625"
|
||||
y="507.36218"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\modules.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="307.94531"
|
||||
y="535.92664"
|
||||
id="text2826-4-4"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\modules.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2828-0-8"
|
||||
x="307.94531"
|
||||
y="535.92664"
|
||||
style="font-size:16px;line-height:1.25">Dynamics</tspan></text>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
|
||||
d="m 315.46875,370.36218 -48.3125,46"
|
||||
id="path2881"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connection-start="#rect2820-7-9-1"
|
||||
inkscape:connection-end="#rect2820-7-9-1-7"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\modules.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
|
||||
d="m 267.4217,462.36218 47.7816,45"
|
||||
id="path2883"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connection-start="#rect2820-7-9-1-7"
|
||||
inkscape:connection-end="#rect2820-7-9"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\modules.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
|
||||
d="m 339.625,370.36218 v 137"
|
||||
id="path2885"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connection-start="#rect2820-7-9-1"
|
||||
inkscape:connection-end="#rect2820-7-9"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\modules.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.5 KiB |
@@ -0,0 +1,148 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="231.14912"
|
||||
height="184.62988"
|
||||
id="svg3598"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="overlap_test.svg"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\regionquery.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs3600">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path4314"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(-0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective3606" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="4.3325546"
|
||||
inkscape:cx="115.57456"
|
||||
inkscape:cy="79.495605"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1138"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata3603">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-209.87013,-406.2323)">
|
||||
<rect
|
||||
y="473.70428"
|
||||
x="232.34212"
|
||||
height="16.815773"
|
||||
width="19.815773"
|
||||
id="rect4120"
|
||||
style="fill:none;stroke:#00d200;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="429.19492"
|
||||
x="378.33273"
|
||||
height="36.334541"
|
||||
width="54.334541"
|
||||
id="rect4122"
|
||||
style="fill:none;stroke:#00d200;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="548.88507"
|
||||
x="222.02287"
|
||||
height="21.954247"
|
||||
width="35.454247"
|
||||
id="rect4124"
|
||||
style="fill:none;stroke:#00d200;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="508.34296"
|
||||
x="408.48077"
|
||||
height="20.538485"
|
||||
width="32.038483"
|
||||
id="rect4126"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="524.32886"
|
||||
x="306.46667"
|
||||
height="61.066628"
|
||||
width="43.566628"
|
||||
id="rect4128"
|
||||
style="fill:none;stroke:#00d200;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="429.74796"
|
||||
x="292.88577"
|
||||
height="66.228439"
|
||||
width="33.728436"
|
||||
id="rect4130"
|
||||
style="fill:none;stroke:#00d200;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
style="fill:none;stroke:#00d200;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4276"
|
||||
width="33.790939"
|
||||
height="30.790941"
|
||||
x="374.60455"
|
||||
y="547.46674" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4278"
|
||||
width="49.259716"
|
||||
height="43.759716"
|
||||
x="210.37013"
|
||||
y="406.7323" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2826"
|
||||
width="149.5"
|
||||
height="128"
|
||||
x="248"
|
||||
y="462.36218" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
151
3-mid/physics/implement/box2d/contrib/docs/images/raycast.svg
Normal file
@@ -0,0 +1,151 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="248.01385"
|
||||
height="218.69197"
|
||||
id="svg3598"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="raycast.svg"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\raycast.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs3600">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path4314"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(-0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective3606" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.6543567"
|
||||
inkscape:cx="124.00693"
|
||||
inkscape:cy="94.046232"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1246"
|
||||
inkscape:window-height="849"
|
||||
inkscape:window-x="100"
|
||||
inkscape:window-y="100"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata3603">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-193.0054,-367.20351)">
|
||||
<rect
|
||||
y="473.70428"
|
||||
x="232.34212"
|
||||
height="16.815773"
|
||||
width="19.815773"
|
||||
id="rect4120"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="429.19492"
|
||||
x="378.33273"
|
||||
height="36.334541"
|
||||
width="54.334541"
|
||||
id="rect4122"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="548.88507"
|
||||
x="222.02287"
|
||||
height="21.954247"
|
||||
width="35.454247"
|
||||
id="rect4124"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="508.34296"
|
||||
x="408.48077"
|
||||
height="20.538485"
|
||||
width="32.038483"
|
||||
id="rect4126"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="524.32886"
|
||||
x="306.46667"
|
||||
height="61.066628"
|
||||
width="43.566628"
|
||||
id="rect4128"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="429.74796"
|
||||
x="292.88577"
|
||||
height="66.228439"
|
||||
width="33.728436"
|
||||
id="rect4130"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4276"
|
||||
width="33.790939"
|
||||
height="30.790941"
|
||||
x="374.60455"
|
||||
y="547.46674" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4278"
|
||||
width="49.259716"
|
||||
height="43.759716"
|
||||
x="210.37013"
|
||||
y="406.7323" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 2;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
|
||||
d="m 413.96525,367.89693 -219.9305,175.4305"
|
||||
id="path4282"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4732"
|
||||
d="m 414.26779,367.59439 -86.85587,69.28175"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1,149 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="335.57034"
|
||||
height="156.77301"
|
||||
id="svg9044"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="self_intersect.svg">
|
||||
<defs
|
||||
id="defs9046">
|
||||
<linearGradient
|
||||
id="linearGradient9562"
|
||||
osb:paint="solid">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop9564" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="4.3657018"
|
||||
inkscape:cx="167.78516"
|
||||
inkscape:cy="67.620514"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1359"
|
||||
inkscape:window-height="1041"
|
||||
inkscape:window-x="150"
|
||||
inkscape:window-y="60"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata9049">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-250.72341,-313.04733)">
|
||||
<path
|
||||
style="fill:none;stroke:#767676;stroke-width:0.7596947px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 253.77069,466.3256 70.02703,-17.5597 c 0,0 71.55832,-119.48587 75.58286,-118.02256 4.02453,1.46331 78.86187,117.75627 78.86187,117.75627 l 104.73573,-34.12145 -76.46629,-98.04163 -191.10691,74.53424 z"
|
||||
id="path9052"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SelfIntersect.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
sodipodi:nodetypes="ccsccccc" />
|
||||
<circle
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SelfIntersect.png"
|
||||
transform="translate(11.817253,-145.14071)"
|
||||
id="path9620"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
cx="241.93153"
|
||||
cy="611.93567"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9622"
|
||||
transform="translate(81.49165,-163.51344)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SelfIntersect.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="241.93153"
|
||||
cy="611.93567"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SelfIntersect.png"
|
||||
transform="translate(235.87634,-162.86043)"
|
||||
id="path9624"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
cx="241.93153"
|
||||
cy="611.93567"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9626"
|
||||
transform="translate(72.583349,-220.46706)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SelfIntersect.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="241.93153"
|
||||
cy="611.93567"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9628"
|
||||
transform="translate(341.33682,-197.58559)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SelfIntersect.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="241.93153"
|
||||
cy="611.93567"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SelfIntersect.png"
|
||||
transform="translate(265.17257,-295.86296)"
|
||||
id="path9630"
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
cx="241.93153"
|
||||
cy="611.93567"
|
||||
r="2.5253813" />
|
||||
<circle
|
||||
style="fill:#b0ddb3;fill-opacity:1;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path9632"
|
||||
transform="translate(157.4829,-281.42241)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SelfIntersect.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="241.93153"
|
||||
cy="611.93567"
|
||||
r="2.5253813" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
@@ -0,0 +1,140 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="322.26855"
|
||||
height="108.76013"
|
||||
id="svg5128"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="skin-collision.svg">
|
||||
<defs
|
||||
id="defs5130" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8"
|
||||
inkscape:cx="149.63278"
|
||||
inkscape:cy="38.587018"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1148"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata5133">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-178.07143,-467.67348)">
|
||||
<rect
|
||||
style="fill:#d7e3f4;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect5140"
|
||||
width="56.568542"
|
||||
height="42.426407"
|
||||
x="314.03363"
|
||||
y="471.8606"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SkinCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<path
|
||||
sodipodi:type="inkscape:offset"
|
||||
inkscape:radius="3.2142856"
|
||||
inkscape:original="M 329.9375 406.5 L 329.9375 448.9375 L 386.5 448.9375 L 386.5 406.5 L 329.9375 406.5 z "
|
||||
style="fill:none;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path5700"
|
||||
d="M 329.9375,403.28516 A 3.214607,3.214607 0 0 0 326.72266,406.5 v 42.4375 a 3.214607,3.214607 0 0 0 3.21484,3.21484 H 386.5 a 3.214607,3.214607 0 0 0 3.21484,-3.21484 V 406.5 A 3.214607,3.214607 0 0 0 386.5,403.28516 Z"
|
||||
transform="translate(-15.980776,64.888322)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SkinCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<rect
|
||||
style="fill:#d7e3f4;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect5138"
|
||||
width="53.538086"
|
||||
height="47.477169"
|
||||
x="319.46075"
|
||||
y="520.26434"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SkinCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<path
|
||||
sodipodi:type="inkscape:offset"
|
||||
inkscape:radius="3.2926946"
|
||||
inkscape:original="M 319.75 426.21875 L 319.75 473.6875 L 373.28125 473.6875 L 373.28125 426.21875 L 319.75 426.21875 z "
|
||||
style="fill:none;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path5720"
|
||||
d="m 319.75,422.92578 a 3.2930238,3.2930238 0 0 0 -3.29297,3.29297 v 47.46875 a 3.2930238,3.2930238 0 0 0 3.29297,3.29297 h 53.53125 a 3.2930238,3.2930238 0 0 0 3.29297,-3.29297 v -47.46875 a 3.2930238,3.2930238 0 0 0 -3.29297,-3.29297 z"
|
||||
transform="translate(-0.59098611,95.046407)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SkinCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 181.82746,572.53972 H 494.97475"
|
||||
id="path5136"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SkinCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<rect
|
||||
style="fill:none;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect5750"
|
||||
width="321.26855"
|
||||
height="6.0714283"
|
||||
x="178.57143"
|
||||
y="569.86218"
|
||||
ry="3.0357141"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SkinCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="393.9595"
|
||||
y="501.07144"
|
||||
id="text5770"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SkinCollision.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5772"
|
||||
x="393.9595"
|
||||
y="501.07144"
|
||||
style="font-size:14px;line-height:1.25">Polygons collide</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="393.9595"
|
||||
y="518.57141"
|
||||
id="tspan5774"
|
||||
style="font-size:14px;line-height:1.25">with their skin</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
@@ -0,0 +1,181 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="174.87"
|
||||
height="149.37024"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="skinned_polygon.svg"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\winding.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3660"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3663"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(-0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Mend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3645"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3657"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3639"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3654"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(1.1,0,0,1.1,1.1,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective10" />
|
||||
<inkscape:perspective
|
||||
id="perspective2835"
|
||||
inkscape:persp3d-origin="292.5 : 75.212601 : 1"
|
||||
inkscape:vp_z="585 : 112.8189 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 112.8189 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8284271"
|
||||
inkscape:cx="64.699886"
|
||||
inkscape:cy="74.828007"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1737"
|
||||
inkscape:window-height="1054"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="121"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-283.1327,-415.03117)">
|
||||
<path
|
||||
style="fill:#d7e3f4;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 289.5,466.36218 26,47.5 57.5,43.5 77.5,-70 -17,-61.5 -70.5,-4 z"
|
||||
id="path5829"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SkinnedPolygon.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:type="inkscape:offset"
|
||||
inkscape:radius="6.4355307"
|
||||
inkscape:original="M 486.25 547.125 L 412.75 591.625 L 438.75 639.125 L 496.25 682.625 L 573.75 612.625 L 556.75 551.125 L 486.25 547.125 z "
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:1, 4;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path3928"
|
||||
d="m 485.9707,540.69531 a 6.4361742,6.4361742 0 0 0 -3.05468,0.92383 l -73.5,44.5 a 6.4361742,6.4361742 0 0 0 -2.31055,8.5957 l 26,47.5 a 6.4361742,6.4361742 0 0 0 1.76172,2.04297 l 57.5,43.5 a 6.4361742,6.4361742 0 0 0 8.19726,-0.35742 l 77.5,-70 a 6.4361742,6.4361742 0 0 0 1.88867,-6.49023 l -17,-61.5 a 6.4361742,6.4361742 0 0 0 -5.83789,-4.71094 l -70.5,-4 a 6.4361742,6.4361742 0 0 0 -0.64453,-0.004 z"
|
||||
transform="translate(-122.68303,-125.1579)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\SkinnedPolygon.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.8 KiB |
BIN
3-mid/physics/implement/box2d/contrib/docs/images/testbed.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
162
3-mid/physics/implement/box2d/contrib/docs/images/tunneling1.svg
Normal file
@@ -0,0 +1,162 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="274.69003"
|
||||
height="244.50266"
|
||||
id="svg3938"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="tunnel1.svg">
|
||||
<defs
|
||||
id="defs3940">
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path4488"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.98994949"
|
||||
inkscape:cx="42.598267"
|
||||
inkscape:cy="2.3289626"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1402"
|
||||
inkscape:window-height="1069"
|
||||
inkscape:window-x="299"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata3943">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-241.98927,-300.82514)">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 348.57143,300.93361 54.28571,244.28572"
|
||||
id="path3946"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Tunnel1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path3952"
|
||||
sodipodi:sides="5"
|
||||
sodipodi:cx="144.28571"
|
||||
sodipodi:cy="343.79074"
|
||||
sodipodi:r1="37.252586"
|
||||
sodipodi:r2="30.137976"
|
||||
sodipodi:arg1="1.0040671"
|
||||
sodipodi:arg2="1.6323856"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 164.28571,375.21931 -43.71001,-2.69547 -10.94359,-42.40364 36.94651,-23.51141 33.77777,27.87278 z"
|
||||
inkscape:transform-center-x="-0.70854843"
|
||||
inkscape:transform-center-y="-2.876691"
|
||||
transform="translate(132.85715,125.71429)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Tunnel1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path3952-2"
|
||||
sodipodi:sides="5"
|
||||
sodipodi:cx="144.28571"
|
||||
sodipodi:cy="343.79074"
|
||||
sodipodi:r1="37.252586"
|
||||
sodipodi:r2="30.137976"
|
||||
sodipodi:arg1="1.0040671"
|
||||
sodipodi:arg2="1.6323856"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 164.28571,375.21931 -43.71001,-2.69547 -10.94359,-42.40364 36.94651,-23.51141 33.77777,27.87278 z"
|
||||
inkscape:transform-center-x="-1.9942167"
|
||||
inkscape:transform-center-y="1.6069069"
|
||||
transform="rotate(22.495262,160.88661,1216.0763)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Tunnel1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:7.19999981, 7.19999981;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
|
||||
d="m 290,413.79075 c 27.14286,-48.57142 84.28571,-68.57142 144.28571,-51.42857"
|
||||
id="path4480"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Tunnel1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="260"
|
||||
y="533.79077"
|
||||
id="text5108"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Tunnel1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5110"
|
||||
x="260"
|
||||
y="533.79077"
|
||||
style="font-size:14px;line-height:1.25">time0</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="466.85715"
|
||||
y="472.07648"
|
||||
id="text5112"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\Tunnel1.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5114"
|
||||
x="466.85715"
|
||||
y="472.07648"
|
||||
style="font-size:14px;line-height:1.25">time1</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.5 KiB |
140
3-mid/physics/implement/box2d/contrib/docs/images/tunneling2.svg
Normal file
@@ -0,0 +1,140 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="234"
|
||||
height="101.75"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="tunneling2.svg"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\tunneling.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3648"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(-0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective10" />
|
||||
<inkscape:perspective
|
||||
id="perspective3602"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2"
|
||||
inkscape:cx="-68"
|
||||
inkscape:cy="83.750001"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1390"
|
||||
inkscape:window-height="1038"
|
||||
inkscape:window-x="50"
|
||||
inkscape:window-y="50"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-210,-490.36218)">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2816"
|
||||
width="233"
|
||||
height="13.5"
|
||||
x="210.5"
|
||||
y="541.86218" />
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path3592"
|
||||
transform="translate(7.5,3)"
|
||||
cx="295.25"
|
||||
cy="494.11218"
|
||||
r="6.25" />
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path3592-1"
|
||||
transform="translate(7.5,91.25)"
|
||||
cx="295.25"
|
||||
cy="494.11218"
|
||||
r="6.25" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.93691868;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.93691866, 1.87383732;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
|
||||
d="M 302.99984,505.33064 V 577.0062"
|
||||
id="path3616"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="319"
|
||||
y="499.86218"
|
||||
id="text4066"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4068"
|
||||
x="319"
|
||||
y="499.86218"
|
||||
style="font-size:12px;line-height:1.25">t=0</tspan></text>
|
||||
<text
|
||||
id="text4070"
|
||||
y="587.86218"
|
||||
x="319"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4074"
|
||||
x="319"
|
||||
y="587.86218"
|
||||
style="font-size:12px;line-height:1.25">t=1</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.0 KiB |
@@ -0,0 +1,193 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="69.631729"
|
||||
height="119.93737"
|
||||
id="svg5128"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="wheel-joint.svg">
|
||||
<defs
|
||||
id="defs5130">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3807"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3789"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3804"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(1.1,0,0,1.1,1.1,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Mstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3792"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="matrix(0.4,0,0,0.4,4,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3786"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.979899"
|
||||
inkscape:cx="-0.64333643"
|
||||
inkscape:cy="-13.952543"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1359"
|
||||
inkscape:window-height="1041"
|
||||
inkscape:window-x="150"
|
||||
inkscape:window-y="60"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata5133">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-313.07066,-471.3606)">
|
||||
<rect
|
||||
style="fill:#d7e3f4;fill-opacity:1;stroke:#767676;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect5140"
|
||||
width="56.568542"
|
||||
height="42.426407"
|
||||
x="314.03363"
|
||||
y="471.8606"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\WheelJoint.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<circle
|
||||
style="fill:#d7e3f4;fill-opacity:1;stroke:#767676;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path2997"
|
||||
transform="translate(-8.5714286,-2.8571429)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\WheelJoint.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="351.25"
|
||||
cy="560.75507"
|
||||
r="16.964285" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 341.78571,492.36218 1.42858,98.92857"
|
||||
id="path3767"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\WheelJoint.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<circle
|
||||
transform="translate(134.22402,67.175144)"
|
||||
id="path3779"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\WheelJoint.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545"
|
||||
cx="208.57143"
|
||||
cy="490.93362"
|
||||
r="2.1428571" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-mid:none;marker-end:url(#Arrow2Lend)"
|
||||
d="m 377.85714,506.46933 0.53571,45"
|
||||
id="path3781"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\WheelJoint.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:none;stroke:#767676;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
|
||||
id="path5547"
|
||||
sodipodi:cx="313.57144"
|
||||
sodipodi:cy="555.39789"
|
||||
sodipodi:rx="23.392857"
|
||||
sodipodi:ry="23.392857"
|
||||
d="M 308.31133,578.19168 A 23.392857,23.392857 0 0 1 290.45762,559.00025 23.392857,23.392857 0 0 1 301.62433,535.2859"
|
||||
sodipodi:start="1.7975952"
|
||||
sodipodi:end="4.1763713"
|
||||
sodipodi:open="true"
|
||||
transform="translate(23.392857,2.5)"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\WheelJoint.png"
|
||||
inkscape:export-xdpi="179.94545"
|
||||
inkscape:export-ydpi="179.94545" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.0 KiB |
241
3-mid/physics/implement/box2d/contrib/docs/images/winding.svg
Normal file
@@ -0,0 +1,241 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="236.53163"
|
||||
height="176.41858"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="winding.svg"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\winding.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3660"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3663"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(-0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Mend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3645"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3657"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3639"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3654"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(1.1,0,0,1.1,1.1,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective10" />
|
||||
<inkscape:perspective
|
||||
id="perspective2835"
|
||||
inkscape:persp3d-origin="292.5 : 75.212601 : 1"
|
||||
inkscape:vp_z="585 : 112.8189 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 112.8189 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.70710678"
|
||||
inkscape:cx="-672.64537"
|
||||
inkscape:cy="145.50488"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1737"
|
||||
inkscape:window-height="1054"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-245.94154,-381.59189)">
|
||||
<text
|
||||
id="6"
|
||||
xml:space="preserve"
|
||||
x="476.47318"
|
||||
y="507.86407"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\winding.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">x</text>
|
||||
<text
|
||||
id="7"
|
||||
xml:space="preserve"
|
||||
x="482.47318"
|
||||
y="507.86407"
|
||||
style="font-style:normal;font-weight:normal;font-size:13.80000019px;line-height:0%;font-family:Calibri;text-align:start;text-anchor:start;fill:#000000"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\winding.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"> </text>
|
||||
<text
|
||||
id="8"
|
||||
xml:space="preserve"
|
||||
x="387.67319"
|
||||
y="387.19345"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\winding.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">y</text>
|
||||
<text
|
||||
id="9"
|
||||
xml:space="preserve"
|
||||
x="396.32318"
|
||||
y="383.19345"
|
||||
style="font-style:normal;font-weight:normal;font-size:13.80000019px;line-height:0%;font-family:Calibri;text-align:start;text-anchor:start;fill:#000000"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\winding.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"> </text>
|
||||
<text
|
||||
id="11"
|
||||
xml:space="preserve"
|
||||
x="245.37318"
|
||||
y="420.09586"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:Calibri;-inkscape-font-specification:Calibri;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\winding.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">CCW winding</text>
|
||||
<text
|
||||
id="12"
|
||||
xml:space="preserve"
|
||||
x="294.62317"
|
||||
y="397.59586"
|
||||
style="font-style:normal;font-weight:normal;font-size:13.80000019px;line-height:0%;font-family:Calibri;text-align:start;text-anchor:start;fill:#000000"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\winding.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"> </text>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
|
||||
d="m 345.5,414.36218 -56.5,34"
|
||||
id="path4267"
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\winding.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#d7e3f4;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 289.5,466.36218 26,47.5 57.5,43.5 77.5,-70 -17,-61.5 -70.5,-4 z"
|
||||
id="path5829"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\winding.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Mstart);marker-end:url(#Arrow2Mend)"
|
||||
d="m 384,392.86218 v 101 h 95.5"
|
||||
id="path5241"
|
||||
inkscape:export-filename="D:\Development\Box2D\Box2D\Documentation\images\winding.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.4 KiB |
214
3-mid/physics/implement/box2d/contrib/docs/loose_ends.md
Normal file
@@ -0,0 +1,214 @@
|
||||
# Loose Ends
|
||||
|
||||
## User Data
|
||||
The `b2Fixture`, `b2Body`, and `b2Joint` classes allow you to attach user data
|
||||
as a uintptr_t. This is handy when you are examining Box2D data
|
||||
structures and you want to determine how they relate to the objects in
|
||||
your game engine.
|
||||
|
||||
For example, it is typical to attach an actor pointer to the rigid body
|
||||
on that actor. This sets up a circular reference. If you have the actor,
|
||||
you can get the body. If you have the body, you can get the actor.
|
||||
|
||||
```cpp
|
||||
GameActor* actor = GameCreateActor();
|
||||
b2BodyDef bodyDef;
|
||||
bodyDef.userData.pointer = reinterpret_cast<uintptr_t>(actor);
|
||||
actor->body = myWorld->CreateBody(&bodyDef);
|
||||
```
|
||||
|
||||
You can also use this to hold an integral value rather than a pointer.
|
||||
|
||||
Here are some examples of cases where you would need the user data:
|
||||
- Applying damage to an actor using a collision result.
|
||||
- Playing a scripted event if the player is inside an axis-aligned box.
|
||||
- Accessing a game structure when Box2D notifies you that a joint is
|
||||
going to be destroyed.
|
||||
|
||||
Keep in mind that user data is optional and you can put anything in it.
|
||||
However, you should be consistent. For example, if you want to store an
|
||||
actor pointer on one body, you should keep an actor pointer on all
|
||||
bodies. Don't store an actor pointer on one body, and a foo pointer on
|
||||
another body. Casting an actor pointer to a foo pointer may lead to a
|
||||
crash.
|
||||
|
||||
User data pointers are 0 by default.
|
||||
|
||||
For fixtures you might consider defining a user data structure that lets
|
||||
you store game specific information, such as material type, effects
|
||||
hooks, sound hooks, etc.
|
||||
|
||||
```cpp
|
||||
struct FixtureUserData
|
||||
{
|
||||
int materialIndex;
|
||||
// ...
|
||||
};
|
||||
|
||||
FixtureUserData myData = new FixtureUserData;
|
||||
myData->materialIndex = 2;
|
||||
|
||||
b2FixtureDef fixtureDef;
|
||||
fixtureDef.shape = &someShape;
|
||||
fixtureDef.userData.pointer = reinterpret_cast<uintptr_t>(myData);
|
||||
|
||||
b2Fixture* fixture = body->CreateFixture(&fixtureDef);
|
||||
// ...
|
||||
|
||||
delete fixture->GetUserData();
|
||||
body->DestroyFixture(fixture);
|
||||
```
|
||||
|
||||
## Custom User Data
|
||||
You can define custom data structures that are embedded in the Box2D data
|
||||
structures. This is done by defining `B2_USER_SETTINGS` and providing the
|
||||
file `b2_user_settings.h`. See `b2_settings.h` for details.
|
||||
|
||||
## Implicit Destruction
|
||||
Box2D doesn't use reference counting. So if you destroy a body it is
|
||||
really gone. Accessing a pointer to a destroyed body has undefined
|
||||
behavior. In other words, your program will likely crash and burn. To
|
||||
help fix these problems, the debug build memory manager fills destroyed
|
||||
entities with FDFDFDFD. This can help find problems more easily in some
|
||||
cases.
|
||||
|
||||
If you destroy a Box2D entity, it is up to you to make sure you remove
|
||||
all references to the destroyed object. This is easy if you only have a
|
||||
single reference to the entity. If you have multiple references, you
|
||||
might consider implementing a handle class to wrap the raw pointer.
|
||||
|
||||
Often when using Box2D you will create and destroy many bodies, shapes,
|
||||
and joints. Managing these entities is somewhat automated by Box2D. If
|
||||
you destroy a body then all associated shapes and joints are
|
||||
automatically destroyed. This is called implicit destruction.
|
||||
|
||||
When you destroy a body, all its attached shapes, joints, and contacts
|
||||
are destroyed. This is called implicit destruction. Any body connected
|
||||
to one of those joints and/or contacts is woken. This process is usually
|
||||
convenient. However, you must be aware of one crucial issue:
|
||||
|
||||
> **Caution**:
|
||||
> When a body is destroyed, all fixtures and joints attached to the body
|
||||
> are automatically destroyed. You must nullify any pointers you have to
|
||||
> those shapes and joints. Otherwise, your program will die horribly if
|
||||
> you try to access or destroy those shapes or joints later.
|
||||
|
||||
To help you nullify your joint pointers, Box2D provides a listener class
|
||||
named b2DestructionListener that you can implement and provide to your
|
||||
world object. Then the world object will notify you when a joint is
|
||||
going to be implicitly destroyed
|
||||
|
||||
Note that there no notification when a joint or fixture is explicitly
|
||||
destroyed. In this case ownership is clear and you can perform the
|
||||
necessary cleanup on the spot. If you like, you can call your own
|
||||
implementation of b2DestructionListener to keep cleanup code
|
||||
centralized.
|
||||
|
||||
Implicit destruction is a great convenience in many cases. It can also
|
||||
make your program fall apart. You may store pointers to shapes and
|
||||
joints somewhere in your code. These pointers become orphaned when an
|
||||
associated body is destroyed. The situation becomes worse when you
|
||||
consider that joints are often created by a part of the code unrelated
|
||||
to management of the associated body. For example, the testbed creates a
|
||||
b2MouseJoint for interactive manipulation of bodies on the screen.
|
||||
|
||||
Box2D provides a callback mechanism to inform your application when
|
||||
implicit destruction occurs. This gives your application a chance to
|
||||
nullify the orphaned pointers. This callback mechanism is described
|
||||
later in this manual.
|
||||
|
||||
You can implement a `b2DestructionListener` that allows b2World to inform
|
||||
you when a shape or joint is implicitly destroyed because an associated
|
||||
body was destroyed. This will help prevent your code from accessing
|
||||
orphaned pointers.
|
||||
|
||||
```cpp
|
||||
class MyDestructionListener : public b2DestructionListener
|
||||
{
|
||||
void SayGoodbye(b2Joint* joint)
|
||||
{
|
||||
// remove all references to joint.
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
You can then register an instance of your destruction listener with your
|
||||
world object. You should do this during world initialization.
|
||||
|
||||
```cpp
|
||||
myWorld->SetListener(myDestructionListener);
|
||||
```
|
||||
|
||||
## Pixels and Coordinate Systems
|
||||
Recall that Box2D uses MKS (meters, kilograms, and seconds) units and
|
||||
radians for angles. You may have trouble working with meters because
|
||||
your game is expressed in terms of pixels. To deal with this in the
|
||||
testbed I have the whole *game* work in meters and just use an OpenGL
|
||||
viewport transformation to scale the world into screen space.
|
||||
|
||||
```cpp
|
||||
float lowerX = -25.0f, upperX = 25.0f, lowerY = -5.0f, upperY = 25.0f;
|
||||
gluOrtho2D(lowerX, upperX, lowerY, upperY);
|
||||
```
|
||||
|
||||
If your game must work in pixel units then you should convert your
|
||||
length units from pixels to meters when passing values from Box2D.
|
||||
Likewise you should convert the values received from Box2D from meters
|
||||
to pixels. This will improve the stability of the physics simulation.
|
||||
|
||||
You have to come up with a reasonable conversion factor. I suggest
|
||||
making this choice based on the size of your characters. Suppose you
|
||||
have determined to use 50 pixels per meter (because your character is 75
|
||||
pixels tall). Then you can convert from pixels to meters using these
|
||||
formulas:
|
||||
|
||||
```cpp
|
||||
xMeters = 0.02f * xPixels;
|
||||
yMeters = 0.02f * yPixels;
|
||||
```
|
||||
|
||||
In reverse:
|
||||
|
||||
```cpp
|
||||
xPixels = 50.0f * xMeters;
|
||||
yPixels = 50.0f * yMeters;
|
||||
```
|
||||
|
||||
You should consider using MKS units in your game code and just convert
|
||||
to pixels when you render. This will simplify your game logic and reduce
|
||||
the chance for errors since the rendering conversion can be isolated to
|
||||
a small amount of code.
|
||||
|
||||
If you use a conversion factor, you should try tweaking it globally to
|
||||
make sure nothing breaks. You can also try adjusting it to improve
|
||||
stability.
|
||||
|
||||
## Debug Drawing
|
||||
You can implement the b2DebugDraw class to get detailed drawing of the
|
||||
physics world. Here are the available entities:
|
||||
- shape outlines
|
||||
- joint connectivity
|
||||
- broad-phase axis-aligned bounding boxes (AABBs)
|
||||
- center of mass
|
||||
|
||||

|
||||
|
||||
This is the preferred method of drawing these physics entities, rather
|
||||
than accessing the data directly. The reason is that much of the
|
||||
necessary data is internal and subject to change.
|
||||
|
||||
The testbed draws physics entities using the debug draw facility and the
|
||||
contact listener, so it serves as the primary example of how to
|
||||
implement debug drawing as well as how to draw contact points.
|
||||
|
||||
## Limitations
|
||||
Box2D uses several approximations to simulate rigid body physics
|
||||
efficiently. This brings some limitations.
|
||||
|
||||
Here are the current limitations:
|
||||
1. Stacking heavy bodies on top of much lighter bodies is not stable. Stability degrades as the mass ratio passes 10:1.
|
||||
2. Chains of bodies connected by joints may stretch if a lighter body is supporting a heavier body. For example, a wrecking ball connect to a chain of light weight bodies may not be stable. Stability degrades as the mass ratio passes 10:1.
|
||||
3. There is typically around 0.5cm of slop in shape versus shape collision.
|
||||
4. Continuous collision does not handle joints. So you may see joint stretching on fast moving objects.
|
||||
5. Box2D uses the symplectic Euler integration scheme. It does not reproduce parabolic motion of projectiles and has only first-order accuracy. However it is fast and has good stability.
|
||||
6. Box2D uses an iterative solver to provide real-time performance. You will not get precisely rigid collisions or pixel perfect accuracy. Increasing the iterations will improve accuracy.
|
||||
216
3-mid/physics/implement/box2d/contrib/docs/overview.md
Normal file
@@ -0,0 +1,216 @@
|
||||
# Overview
|
||||
Box2D is a 2D rigid body simulation library for games. Programmers can
|
||||
use it in their games to make objects move in realistic ways and make
|
||||
the game world more interactive. From the game engine's point of view,
|
||||
a physics engine is just a system for procedural animation.
|
||||
|
||||
Box2D is written in portable C++. Most of the types defined in the
|
||||
engine begin with the b2 prefix. Hopefully this is sufficient to avoid
|
||||
name clashing with your game engine.
|
||||
|
||||
## Prerequisites
|
||||
In this manual I'll assume you are familiar with basic physics
|
||||
concepts, such as mass, force, torque, and impulses. If not, please
|
||||
first consult Google search and Wikipedia.
|
||||
|
||||
Box2D was created as part of a physics tutorial at the Game Developer
|
||||
Conference. You can get these tutorials from the download section of
|
||||
box2d.org.
|
||||
|
||||
Since Box2D is written in C++, you are expected to be experienced in C++
|
||||
programming. Box2D should not be your first C++ programming project! You
|
||||
should be comfortable with compiling, linking, and debugging.
|
||||
|
||||
> **Caution**:
|
||||
> Box2D should not be your first C++ project. Please learn C++
|
||||
> programming, compiling, linking, and debugging before working with
|
||||
> Box2D. There are many resources for this on the net.
|
||||
|
||||
## Scope
|
||||
This manual covers the majority of the Box2D API. However, not every
|
||||
aspect is covered. Please look at the testbed included
|
||||
with Box2D to learn more.
|
||||
|
||||
This manual is only updated with new releases. The latest version of
|
||||
Box2D may be out of sync with this manual.
|
||||
|
||||
## Feedback and Bugs
|
||||
Please file bugs and feature requests here:
|
||||
[Box2D Issues](https://github.com/erincatto/box2d/issues)
|
||||
|
||||
You can help to ensure your issue gets fixed if you provide sufficient
|
||||
detail. A testbed example that reproduces the problem is ideal. You can
|
||||
read about the testbed later in this document.
|
||||
|
||||
There is also a [Discord server](https://discord.gg/NKYgCBP) and a
|
||||
[subreddit](https://reddit.com/r/box2d) for Box2D.
|
||||
|
||||
## Core Concepts
|
||||
Box2D works with several fundamental concepts and objects. We briefly
|
||||
define these objects here and more details are given later in this
|
||||
document.
|
||||
|
||||
#### shape
|
||||
A shape is 2D geometrical object, such as a circle or polygon.
|
||||
|
||||
#### rigid body
|
||||
A chunk of matter that is so strong that the distance between any two
|
||||
bits of matter on the chunk is constant. They are hard like a diamond.
|
||||
In the following discussion we use body interchangeably with rigid body.
|
||||
|
||||
#### fixture
|
||||
A fixture binds a shape to a body and adds material properties such as
|
||||
density, friction, and restitution. A fixture puts a shape into the
|
||||
collision system (broad-phase) so that it can collide with other shapes.
|
||||
|
||||
#### constraint
|
||||
A constraint is a physical connection that removes degrees of freedom
|
||||
from bodies. A 2D body has 3 degrees of freedom (two translation
|
||||
coordinates and one rotation coordinate). If we take a body and pin it
|
||||
to the wall (like a pendulum) we have constrained the body to the wall.
|
||||
At this point the body can only rotate about the pin, so the constraint
|
||||
has removed 2 degrees of freedom.
|
||||
|
||||
#### contact constraint
|
||||
A special constraint designed to prevent penetration of rigid bodies and
|
||||
to simulate friction and restitution. You do not create contact
|
||||
constraints; they are created automatically by Box2D.
|
||||
|
||||
#### joint
|
||||
This is a constraint used to hold two or more bodies together. Box2D
|
||||
supports several joint types: revolute, prismatic, distance, and more.
|
||||
Some joints may have limits and motors.
|
||||
|
||||
#### joint limit
|
||||
A joint limit restricts the range of motion of a joint. For example, the
|
||||
human elbow only allows a certain range of angles.
|
||||
|
||||
#### joint motor
|
||||
A joint motor drives the motion of the connected bodies according to the
|
||||
joint's degrees of freedom. For example, you can use a motor to drive
|
||||
the rotation of an elbow.
|
||||
|
||||
#### world
|
||||
A physics world is a collection of bodies, fixtures, and constraints
|
||||
that interact together. Box2D supports the creation of multiple worlds,
|
||||
but this is usually not necessary or desirable.
|
||||
|
||||
#### solver
|
||||
The physics world has a solver that is used to advance time and to
|
||||
resolve contact and joint constraints. The Box2D solver is a high
|
||||
performance iterative solver that operates in order N time, where N is
|
||||
the number of constraints.
|
||||
|
||||
#### continuous collision
|
||||
The solver advances bodies in time using discrete time steps. Without
|
||||
intervention this can lead to tunneling.
|
||||

|
||||
|
||||
Box2D contains specialized algorithms to deal with tunneling. First, the
|
||||
collision algorithms can interpolate the motion of two bodies to find
|
||||
the first time of impact (TOI). Second, there is a sub-stepping solver
|
||||
that moves bodies to their first time of impact and then resolves the
|
||||
collision.
|
||||
|
||||
## Modules
|
||||
Box2D is composed of three modules: Common, Collision, and Dynamics. The
|
||||
Common module has code for allocation, math, and settings. The Collision
|
||||
module defines shapes, a broad-phase, and collision functions/queries.
|
||||
Finally the Dynamics module provides the simulation world, bodies,
|
||||
fixtures, and joints.
|
||||

|
||||
|
||||
## Units
|
||||
Box2D works with floating point numbers and tolerances have to be used
|
||||
to make Box2D perform well. These tolerances have been tuned to work
|
||||
well with meters-kilogram-second (MKS) units. In particular, Box2D has
|
||||
been tuned to work well with moving shapes between 0.1 and 10 meters. So
|
||||
this means objects between soup cans and buses in size should work well.
|
||||
Static shapes may be up to 50 meters long without trouble.
|
||||
|
||||
Being a 2D physics engine, it is tempting to use pixels as your units.
|
||||
Unfortunately this will lead to a poor simulation and possibly weird
|
||||
behavior. An object of length 200 pixels would be seen by Box2D as the
|
||||
size of a 45 story building.
|
||||
|
||||
> **Caution**:
|
||||
> Box2D is tuned for MKS units. Keep the size of moving objects roughly
|
||||
> between 0.1 and 10 meters. You'll need to use some scaling system when
|
||||
> you render your environment and actors. The Box2D testbed does this by
|
||||
> using an OpenGL viewport transform. DO NOT USE PIXELS.
|
||||
|
||||
It is best to think of Box2D bodies as moving billboards upon which you
|
||||
attach your artwork. The billboard may move in a unit system of meters,
|
||||
but you can convert that to pixel coordinates with a simple scaling
|
||||
factor. You can then use those pixel coordinates to place your sprites,
|
||||
etc. You can also account for flipped coordinate axes.
|
||||
|
||||
Another limitation to consider is overall world size. If your world units
|
||||
become larger than 2 kilometers or so, then the lost precision can affect
|
||||
stability.
|
||||
|
||||
> **Caution**:
|
||||
> Box2D works best with world sizes less than 2 kilometers. Use
|
||||
> b2World::ShiftOrigin to support larger worlds.
|
||||
|
||||
If you need to have a larger game world, consider using
|
||||
b2World::ShiftOrigin to keep the world origin close to your player. I recommend
|
||||
to use grid lines along with some hysteresis for triggering calls to ShiftOrigin.
|
||||
This call should be made infrequently because it is has CPU cost. You may
|
||||
need to store a physics offset when translating between game units and Box2D units.
|
||||
|
||||
Box2D uses radians for angles. The body rotation is stored in radians
|
||||
and may grow unbounded. Consider normalizing the angle of your bodies if
|
||||
the magnitude of the angle becomes too large (use `b2Body::SetTransform`).
|
||||
|
||||
> **Caution**:
|
||||
> Box2D uses radians, not degrees.
|
||||
|
||||
## Changing the length units
|
||||
Advanced users may change the length unit modifying `b2_lengthUnitsPerMeter`.
|
||||
You can avoid merge conflicts by defining `B2_USER_SETTINGS` and providing
|
||||
`b2_user_settings.h`. See the file `b2_settings.h` for details.
|
||||
|
||||
## Factories and Definitions
|
||||
Fast memory management plays a central role in the design of the Box2D
|
||||
API. So when you create a b2Body or a b2Joint, you need to call the
|
||||
factory functions on b2World. You should never try to allocate these
|
||||
types in another manner.
|
||||
|
||||
There are creation functions:
|
||||
|
||||
```cpp
|
||||
b2Body* b2World::CreateBody(const b2BodyDef* def)
|
||||
b2Joint* b2World::CreateJoint(const b2JointDef* def)
|
||||
```
|
||||
|
||||
And there are corresponding destruction functions:
|
||||
|
||||
```cpp
|
||||
void b2World::DestroyBody(b2Body* body)
|
||||
void b2World::DestroyJoint(b2Joint* joint)
|
||||
```
|
||||
|
||||
When you create a body or joint, you need to provide a definition. These
|
||||
definitions contain all the information needed to build the body or
|
||||
joint. By using this approach we can prevent construction errors, keep
|
||||
the number of function parameters small, provide sensible defaults, and
|
||||
reduce the number of accessors.
|
||||
|
||||
Since fixtures (shapes) must be parented to a body, they are created and
|
||||
destroyed using a factory method on b2Body:
|
||||
|
||||
```cpp
|
||||
b2Fixture* b2Body::CreateFixture(const b2FixtureDef* def)
|
||||
void b2Body::DestroyFixture(b2Fixture* fixture)
|
||||
```
|
||||
|
||||
There is also shortcut to create a fixture directly from the shape and
|
||||
density.
|
||||
|
||||
```cpp
|
||||
b2Fixture* b2Body::CreateFixture(const b2Shape* shape, float density)
|
||||
```
|
||||
|
||||
Factories do not retain references to the definitions. So you can create
|
||||
definitions on the stack and keep them in temporary resources.
|
||||
4
3-mid/physics/implement/box2d/contrib/docs/references.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# References
|
||||
- [Erin Catto's Publications](https://box2d.org/publications/)
|
||||
- Collision Detection in Interactive 3D Environments, Gino van den Bergen, 2004
|
||||
- Real-Time Collision Detection, Christer Ericson, 2005
|
||||
21
3-mid/physics/implement/box2d/contrib/docs/testbed.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# Testbed
|
||||
Once you have conquered the HelloWorld example, you should start looking
|
||||
at Box2D's testbed. The testbed is a testing framework and demo
|
||||
environment. Here are some of the features:
|
||||
- Camera with pan and zoom.
|
||||
- Mouse picking of shapes attached to dynamic bodies.
|
||||
- Extensible set of tests.
|
||||
- GUI for selecting tests, parameter tuning, and debug drawing options.
|
||||
- Pause and single step simulation.
|
||||
- Text rendering.
|
||||
|
||||

|
||||
|
||||
The testbed has many examples of Box2D usage in the test cases and the
|
||||
framework itself. I encourage you to explore and tinker with the testbed
|
||||
as you learn Box2D.
|
||||
|
||||
Note: the testbed is written using [GLFW](https://www.glfw.org) and
|
||||
[imgui](https://github.com/ocornut/imgui). The testbed is not part of the
|
||||
Box2D library. The Box2D library is agnostic about rendering. As shown by
|
||||
the HelloWorld example, you don't need a renderer to use Box2D.
|
||||