Skip to content

Commit

Permalink
Added 3D example and updated docs
Browse files Browse the repository at this point in the history
  • Loading branch information
bohnacker committed Jan 28, 2020
1 parent 3eca2a0 commit b1d0ad8
Show file tree
Hide file tree
Showing 7 changed files with 287 additions and 135 deletions.
201 changes: 96 additions & 105 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,201 +10,192 @@ For a more detailed explanation of this project read [this](https://hartmut-bohn

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

#### Table of Contents

- [StretchTransform](#stretchtransform)
- [addAnchor](#addanchor)
- [addAnchor](#addanchor-1)
- [addAnchor](#addanchor-2)
- [addAnchor](#addanchor-3)
- [removeAnchor](#removeanchor)
- [removeAnchor](#removeanchor-1)
- [getAnchorCount](#getanchorcount)
- [getAnchor](#getanchor)
- [getAnchorByPos](#getanchorbypos)
- [getAnchorByOriginPos](#getanchorbyoriginpos)
- [getAnchorByTargetPos](#getanchorbytargetpos)
- [setAnchorOrigin](#setanchororigin)
- [setAnchorTarget](#setanchortarget)
- [getWeightingExponent1](#getweightingexponent1)
- [setWeightingExponent1](#setweightingexponent1)
- [getWeightingExponent2](#getweightingexponent2)
- [setWeightingExponent2](#setweightingexponent2)
- [transform](#transform)
- [transform](#transform-1)
- [updateAnchorMatrices](#updateanchormatrices)

### StretchTransform

`new StretchTransform()` create an empty StretchTransform.
new StretchTransform() create an empty StretchTransform.

### addAnchor
#### addAnchor

Adds an Anchor.

*Parameters*
**Parameters**

- `x` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** X coordinate for origin and target position
- `y` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Y coordinate for origin and target position
- `p` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** Array [x, y] that will be used for origin and target position

### addAnchor
#### addAnchor

Adds an Anchor.

*Parameters*
**Parameters**

- `xOrigin` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** X coordinate for origin position
- `yOrigin` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Y coordinate for origin position
- `xTarget` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** X coordinate for target position
- `yTarget` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Y coordinate for target position
- `xOrigin` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** X coordinate for origin position
- `yOrigin` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Y coordinate for origin position
- `xTarget` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** X coordinate for target position
- `yTarget` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Y coordinate for target position

### addAnchor
#### addAnchor

Adds an Anchor.

*Parameters*
**Parameters**

- `pOrigin` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** Array [x, y] for origin position
- `pTarget` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** Array [x, y] for target position
- `pOrigin` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** Array [x, y] for origin position
- `pTarget` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** Array [x, y] for target position

### addAnchor
#### addAnchor

Adds an Anchor.

*Parameters*
**Parameters**

- `p` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** Array [x, y] that will be used for origin and target position
- `x` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** X coordinate for origin and target position
- `y` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Y coordinate for origin and target position

### removeAnchor
#### removeAnchor

Removes an Anchor.

*Parameters*
**Parameters**

- `anchor` **Anchor** Anchor to remove
- `i` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the anchor

### removeAnchor
#### removeAnchor

Removes an Anchor.

*Parameters*
**Parameters**

- `i` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the anchor
- `anchor` **Anchor** Anchor to remove

### getAnchorCount
#### getAnchorCount

Returns **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** of anchors added to the MultiTransform
Returns **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** of anchors added to the MultiTransform

### getAnchor
#### getAnchor

*Parameters*
**Parameters**

- `i` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the anchor to return.
- `i` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the anchor to return.

### getAnchorByPos
#### getAnchorByPos

*Parameters*
**Parameters**

- `x` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** x coordinate of the origin or target position of the anchor to return.
- `y` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** y coordinate of the origin or target position of the anchor to return.
- `tolerance` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Radius around Anchor
- `p` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** point [x, y, z] to search for an anchor (either origin or target position). Z coordinate is optional.
- `tolerance` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Radius around Anchor

Returns **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the found anchor or -1 if nothing was found at the
Returns **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the found anchor or -1 if nothing was found at the
specified position

### getAnchorByOriginPos
#### getAnchorByOriginPos

*Parameters*
**Parameters**

- `x` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** x coordinate of the origin position of the anchor to return.
- `y` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** y coordinate of the origin position of the anchor to return.
- `tolerance` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Radius around Anchor
- `p` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** point [x, y, z] to search for the origin position of an anchor. Z coordinate is optional.
- `tolerance` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Radius around Anchor

Returns **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the found anchor or -1 if nothing was found at the
Returns **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the found anchor or -1 if nothing was found at the
specified position

### getAnchorByTargetPos
#### getAnchorByTargetPos

*Parameters*
**Parameters**

- `x` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** x coordinate of the target position of the anchor to return.
- `y` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** y coordinate of the target position of the anchor to return.
- `tolerance` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Radius around Anchor
- `p` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** point [x, y, z] to search for the target position of an anchor. Z coordinate is optional.
- `tolerance` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Radius around Anchor

Returns **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the found anchor or -1 if nothing was found at the
Returns **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the found anchor or -1 if nothing was found at the
specified position

### setAnchorOrigin

*Parameters*

- `i` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the anchor.
- `x` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** New x coordinate of the origin position.
- `y` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** New y coordinate of the origin position.

### setAnchorTarget

*Parameters*

- `i` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the anchor.
- `x` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** New x coordinate of the target position.
- `y` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** New y coordinate of the target position.
#### setAnchorOrigin

### setWeightingMode
**Parameters**

*Parameters*
- `i` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the anchor.
- `p` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** New origin position [x, y, z]. Z coordinate is optional.

- `weightingMode` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** String, either 'simple' or 'directional'.
#### setAnchorTarget

### isSimple
**Parameters**

Returns **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** true, if weightingMode is SIMPLE
- `i` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Index of the anchor.
- `p` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** New target position [x, y, z]. Z coordinate is optional.

### isDirectional
#### getWeightingExponent1

Returns **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** true, if weightingMode is DIRECTIONAL
Returns **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**

### getWeightingExponent1

Returns **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)**

### setWeightingExponent1
#### setWeightingExponent1

Exponent of the weighting function. Defines how the relations from one anchor
to all others are cumulated. The closer the other anchor lies, the
stronger it is weighted.

*Parameters*
**Parameters**

- `val` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Usually something between 0 and 2. Default = 1.
- `val` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Usually something between 0 and 2. Default = 1.

### getWeightingExponent2
#### getWeightingExponent2

Returns **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)**
Returns **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**

### setWeightingExponent2
#### setWeightingExponent2

Exponent of the weighting function when applying all anchor matrices to a
point.

*Parameters*

- `val` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Usually 1 or higher. Default = 2.

### getWeightingExponent3

Returns **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)**

### setWeightingExponent3

Exponent of the weighting function that factors in, if the direction
from anchor to point and from one anchor to another is quite similar.
Only applicable when weightingMode is DIRECTIONAL.

*Parameters*
**Parameters**

- `val` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Usually something between 0 and 2. Default = 1.
- `val` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Usually 1 or higher. Default = 2.

### transform
#### transform

Main function of the class. Transforms a point on the plane and returns
its new position.

*Parameters*
**Parameters**

- `x` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** X coordinate of the point to be transformed
- `y` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Y coordinate of the point to be transformed
- `x` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** X coordinate of the point to be transformed
- `y` **[Number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Y coordinate of the point to be transformed

Returns **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** Transformed point as an Array [x, y]
Returns **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** Transformed point as an Array [x, y]

### transform
#### transform

Main function of the class. Transforms a point on the plane and returns
its new position.

*Parameters*
**Parameters**

- `p` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** Point given as an Array [x, y] to be transformed
- `p` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** Point given as an Array [x, y, z] to be transformed. Z coordinate is optional.

Returns **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** Transformed point as an Array [x, y]
Returns **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** Transformed point as an Array [x, y]

### updateAnchorMatrices
#### updateAnchorMatrices

It's usually not necessary to call this method. If anchors and parameters
are always set with the given methods (setAnchorOrigin(), ...), this
Expand Down
11 changes: 1 addition & 10 deletions dist/StretchTransform.js
Original file line number Diff line number Diff line change
Expand Up @@ -393,9 +393,7 @@ function StretchTransform() {

var q = Q.create();
Q.rotationTo(q, v1, v2);
// var q = Quaternion.fromBetweenVectors(v1, v2);
quaternions.push(q);
// // console.log(q);

var d1 = V.dist(originJ, originI);
var d2 = V.dist(targetJ, targetI);
Expand All @@ -410,21 +408,16 @@ function StretchTransform() {
sFac *= s;
} else {
angles.push(0);
// quaternions.push(new Quaternion());
quaternions.push(Q.create());
}
}

// var quatAv = H.quaternionAverage(quaternions, weights);
// var rotationMatrix = M.fromValues(...quatAv.toMatrix4());

var quatAv = H.quaternionAverage(quaternions, weights);
var rotationMatrix = M.create();
M.fromQuat(rotationMatrix, quatAv);


M.mul(matrix, matrix, rotationMatrix);
// M.rotateZ(matrix, matrix, H.angleAverage(angles, weights));
M.scale(matrix, matrix, [sFac, sFac, sFac]);

this.anchors[i].setTransformMatrix(matrix);
Expand Down Expand Up @@ -749,18 +742,16 @@ var H = {
}

// interpolate quaternions
// var res = quaternions[0].clone();
var res = Q.clone(quaternions[0]);
for (i = 1; i < len; i++) {
var amount = weights[i] / float(weightSums[i]);
// res = res.slerp(quaternions[i])(amount)
Q.slerp(res, res, quaternions[i], amount);
}
return res;
},

dist: function() {
let x1, y1, z1, x2, y2, z2
var x1, y1, z1, x2, y2, z2
if (arguments.length == 4) {
x1 = arguments[0];
y1 = arguments[1];
Expand Down
2 changes: 1 addition & 1 deletion dist/StretchTransform.min.js

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions examples/example_3D/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../dist/StretchTransform.js"></script>
<script src="../lib/p5.min.js"></script>
<script src="sketch.js"></script>
</head>
<body>
</body>
</html>
Loading

0 comments on commit b1d0ad8

Please sign in to comment.