Migrating from ControlCore to RoboidControl
This commit is contained in:
parent
390f7807cd
commit
d82388fc45
@ -1,31 +0,0 @@
|
|||||||
using System.Threading;
|
|
||||||
using RoboidControl;
|
|
||||||
|
|
||||||
class BB2B {
|
|
||||||
static void Main() {
|
|
||||||
// The robot's propulsion is a differential drive
|
|
||||||
DifferentialDrive bb2b = new();
|
|
||||||
// It has a touch sensor at the front left of the roboid
|
|
||||||
TouchSensor touchLeft = new(bb2b);
|
|
||||||
// and other one on the right
|
|
||||||
TouchSensor touchRight = new(bb2b);
|
|
||||||
|
|
||||||
// Do forever:
|
|
||||||
while (true) {
|
|
||||||
// The left wheel turns forward when nothing is touched on the right side
|
|
||||||
// and turn backward when the roboid hits something on the right
|
|
||||||
float leftWheelSpeed = touchRight.touchedSomething ? -600.0f : 600.0f;
|
|
||||||
// The right wheel does the same, but instead is controlled by
|
|
||||||
// touches on the left side
|
|
||||||
float rightWheelSpeed = touchLeft.touchedSomething ? -600.0f : 600.0f;
|
|
||||||
// When both sides are touching something, both wheels will turn backward
|
|
||||||
// and the roboid will move backwards
|
|
||||||
bb2b.SetWheelVelocity(leftWheelSpeed, rightWheelSpeed);
|
|
||||||
|
|
||||||
// Update the roboid state
|
|
||||||
bb2b.Update(true);
|
|
||||||
// and sleep for 100ms
|
|
||||||
Thread.Sleep(100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,9 +10,9 @@ namespace LinearAlgebra
|
|||||||
|
|
||||||
public readonly struct Slice
|
public readonly struct Slice
|
||||||
{
|
{
|
||||||
public uint start { get; }
|
public int start { get; }
|
||||||
public uint stop { get; }
|
public int stop { get; }
|
||||||
public Slice(uint start, uint stop)
|
public Slice(int start, int stop)
|
||||||
{
|
{
|
||||||
this.start = start;
|
this.start = start;
|
||||||
this.stop = stop;
|
this.stop = stop;
|
||||||
@ -23,10 +23,10 @@ namespace LinearAlgebra
|
|||||||
{
|
{
|
||||||
public float[,] data { get; }
|
public float[,] data { get; }
|
||||||
|
|
||||||
public uint nRows => (uint)data.GetLength(0);
|
public int nRows => data.GetLength(0);
|
||||||
public uint nCols => (uint)data.GetLength(1);
|
public int nCols => data.GetLength(1);
|
||||||
|
|
||||||
public Matrix2(uint nRows, uint nCols)
|
public Matrix2(int nRows, int nCols)
|
||||||
{
|
{
|
||||||
this.data = new float[nRows, nCols];
|
this.data = new float[nRows, nCols];
|
||||||
}
|
}
|
||||||
@ -46,7 +46,7 @@ namespace LinearAlgebra
|
|||||||
return new Matrix2(data);
|
return new Matrix2(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Matrix2 Zero(uint nRows, uint nCols)
|
public static Matrix2 Zero(int nRows, int nCols)
|
||||||
{
|
{
|
||||||
return new Matrix2(nRows, nCols);
|
return new Matrix2(nRows, nCols);
|
||||||
}
|
}
|
||||||
@ -60,11 +60,11 @@ namespace LinearAlgebra
|
|||||||
return new Matrix2(result);
|
return new Matrix2(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Matrix2 Identity(uint size)
|
public static Matrix2 Identity(int size)
|
||||||
{
|
{
|
||||||
return Diagonal(1, size);
|
return Diagonal(1, size);
|
||||||
}
|
}
|
||||||
public static Matrix2 Identity(uint nRows, uint nCols)
|
public static Matrix2 Identity(int nRows, int nCols)
|
||||||
{
|
{
|
||||||
Matrix2 m = Zero(nRows, nCols);
|
Matrix2 m = Zero(nRows, nCols);
|
||||||
m.FillDiagonal(1);
|
m.FillDiagonal(1);
|
||||||
@ -78,7 +78,7 @@ namespace LinearAlgebra
|
|||||||
resultData[ix, ix] = v.data[ix];
|
resultData[ix, ix] = v.data[ix];
|
||||||
return new Matrix2(resultData);
|
return new Matrix2(resultData);
|
||||||
}
|
}
|
||||||
public static Matrix2 Diagonal(float f, uint size)
|
public static Matrix2 Diagonal(float f, int size)
|
||||||
{
|
{
|
||||||
float[,] resultData = new float[size, size];
|
float[,] resultData = new float[size, size];
|
||||||
for (int ix = 0; ix < size; ix++)
|
for (int ix = 0; ix < size; ix++)
|
||||||
@ -87,13 +87,13 @@ namespace LinearAlgebra
|
|||||||
}
|
}
|
||||||
public void FillDiagonal(Matrix1 v)
|
public void FillDiagonal(Matrix1 v)
|
||||||
{
|
{
|
||||||
uint n = Math.Min(Math.Min(this.nRows, this.nCols), v.size);
|
int n = (int)Math.Min(Math.Min(this.nRows, this.nCols), v.size);
|
||||||
for (int ix = 0; ix < n; ix++)
|
for (int ix = 0; ix < n; ix++)
|
||||||
this.data[ix, ix] = v.data[ix];
|
this.data[ix, ix] = v.data[ix];
|
||||||
}
|
}
|
||||||
public void FillDiagonal(float f)
|
public void FillDiagonal(float f)
|
||||||
{
|
{
|
||||||
uint n = Math.Min(this.nRows, this.nCols);
|
int n = Math.Min(this.nRows, this.nCols);
|
||||||
for (int ix = 0; ix < n; ix++)
|
for (int ix = 0; ix < n; ix++)
|
||||||
this.data[ix, ix] = f;
|
this.data[ix, ix] = f;
|
||||||
}
|
}
|
||||||
@ -108,9 +108,17 @@ namespace LinearAlgebra
|
|||||||
return new Matrix2(result);
|
return new Matrix2(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Matrix1 GetRow(int rowIx) {
|
||||||
|
float[] row = new float[this.nCols];
|
||||||
|
for (int colIx = 0; colIx < this.nCols; colIx++) {
|
||||||
|
row[colIx] = this.data[rowIx, colIx];
|
||||||
|
}
|
||||||
|
return new Matrix1(row);
|
||||||
|
}
|
||||||
|
|
||||||
#if UNITY_5_3_OR_NEWER
|
#if UNITY_5_3_OR_NEWER
|
||||||
public Vector3Float GetRow3(int rowIx) {
|
public Vector3Float GetRow3(int rowIx) {
|
||||||
uint cols = this.nCols;
|
int cols = this.nCols;
|
||||||
Vector3Float row = new() {
|
Vector3Float row = new() {
|
||||||
x = this.data[rowIx, 0],
|
x = this.data[rowIx, 0],
|
||||||
y = this.data[rowIx, 1],
|
y = this.data[rowIx, 1],
|
||||||
@ -131,6 +139,14 @@ namespace LinearAlgebra
|
|||||||
this.data[rowIx, 2] = v.z;
|
this.data[rowIx, 2] = v.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SwapRows(int row1, int row2) {
|
||||||
|
for (uint ix = 0; ix < this.nCols; ix++) {
|
||||||
|
float temp = this.data[row1, ix];
|
||||||
|
this.data[row1, ix] = this.data[row2, ix];
|
||||||
|
this.data[row2, ix] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Matrix1 GetColumn(int colIx)
|
public Matrix1 GetColumn(int colIx)
|
||||||
{
|
{
|
||||||
float[] column = new float[this.nRows];
|
float[] column = new float[this.nRows];
|
||||||
@ -140,6 +156,15 @@ namespace LinearAlgebra
|
|||||||
}
|
}
|
||||||
return new Matrix1(column);
|
return new Matrix1(column);
|
||||||
}
|
}
|
||||||
|
public void SetColumn(int colIx, Matrix1 v) {
|
||||||
|
for (uint ix = 0; ix < v.size; ix++)
|
||||||
|
this.data[ix, colIx] = v.data[ix];
|
||||||
|
}
|
||||||
|
public void SetColumn(int colIx, Vector3Float v) {
|
||||||
|
this.data[0, colIx] = v.x;
|
||||||
|
this.data[1, colIx] = v.y;
|
||||||
|
this.data[2, colIx] = v.z;
|
||||||
|
}
|
||||||
|
|
||||||
public static bool AllClose(Matrix2 A, Matrix2 B, float atol = 1e-08f)
|
public static bool AllClose(Matrix2 A, Matrix2 B, float atol = 1e-08f)
|
||||||
{
|
{
|
||||||
@ -302,18 +327,37 @@ namespace LinearAlgebra
|
|||||||
return new Matrix2(result);
|
return new Matrix2(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Matrix2 GetRows(Slice slice) {
|
||||||
|
return GetRows(slice.start, slice.stop);
|
||||||
|
}
|
||||||
|
public Matrix2 GetRows(int from, int to) {
|
||||||
|
if (from < 0 || to >= this.nRows)
|
||||||
|
throw new System.ArgumentException("Slice index out of range.");
|
||||||
|
|
||||||
|
float[,] result = new float[to - from, this.nCols];
|
||||||
|
int resultRowIx = 0;
|
||||||
|
for (int rowIx = from; rowIx < to; rowIx++) {
|
||||||
|
for (int colIx = 0; colIx < this.nCols; colIx++)
|
||||||
|
result[resultRowIx, colIx] = this.data[rowIx, colIx];
|
||||||
|
|
||||||
|
resultRowIx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Matrix2(result);
|
||||||
|
}
|
||||||
|
|
||||||
public Matrix2 Slice(Slice slice)
|
public Matrix2 Slice(Slice slice)
|
||||||
{
|
{
|
||||||
return Slice(slice.start, slice.stop);
|
return Slice(slice.start, slice.stop);
|
||||||
}
|
}
|
||||||
public Matrix2 Slice(uint from, uint to)
|
public Matrix2 Slice(int from, int to)
|
||||||
{
|
{
|
||||||
if (from < 0 || to >= this.nRows)
|
if (from < 0 || to >= this.nRows)
|
||||||
throw new System.ArgumentException("Slice index out of range.");
|
throw new System.ArgumentException("Slice index out of range.");
|
||||||
|
|
||||||
float[,] result = new float[to - from, this.nCols];
|
float[,] result = new float[to - from, this.nCols];
|
||||||
int resultRowIx = 0;
|
int resultRowIx = 0;
|
||||||
for (uint rowIx = from; rowIx < to; rowIx++)
|
for (int rowIx = from; rowIx < to; rowIx++)
|
||||||
{
|
{
|
||||||
for (int colIx = 0; colIx < this.nCols; colIx++)
|
for (int colIx = 0; colIx < this.nCols; colIx++)
|
||||||
{
|
{
|
||||||
@ -328,39 +372,42 @@ namespace LinearAlgebra
|
|||||||
{
|
{
|
||||||
return Slice((rowRange.start, rowRange.stop), (colRange.start, colRange.stop));
|
return Slice((rowRange.start, rowRange.stop), (colRange.start, colRange.stop));
|
||||||
}
|
}
|
||||||
|
public Matrix2 Slice((int start, int stop) rowRange, (int start, int stop) colRange)
|
||||||
public Matrix2 Slice((uint start, uint stop) rowRange, (uint start, uint stop) colRange)
|
|
||||||
{
|
{
|
||||||
float[,] result = new float[rowRange.stop - rowRange.start, colRange.stop - colRange.start];
|
float[,] result = new float[rowRange.stop - rowRange.start, colRange.stop - colRange.start];
|
||||||
|
|
||||||
uint resultRowIx = 0;
|
int resultRowIx = 0;
|
||||||
uint resultColIx = 0;
|
int resultColIx = 0;
|
||||||
for (uint i = rowRange.start; i < rowRange.stop; i++)
|
for (int i = rowRange.start; i < rowRange.stop; i++)
|
||||||
{
|
{
|
||||||
for (uint j = colRange.start; j < colRange.stop; j++)
|
for (int j = colRange.start; j < colRange.stop; j++)
|
||||||
result[resultRowIx, resultColIx] = this.data[i, j];
|
result[resultRowIx, resultColIx] = this.data[i, j];
|
||||||
}
|
}
|
||||||
return new Matrix2(result);
|
return new Matrix2(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateSlice(Slice slice, Matrix2 m)
|
public void UpdateSlice(Slice slice, Matrix2 m) {
|
||||||
{
|
UpdateSlice((slice.start, slice.stop), m);
|
||||||
|
}
|
||||||
|
public void UpdateSlice((int start, int stop) slice, Matrix2 m) {
|
||||||
|
// if (slice.start == slice.stop)
|
||||||
|
// Console.WriteLine("WARNING: no data is updates when start equals stop in a slice!");
|
||||||
int mRowIx = 0;
|
int mRowIx = 0;
|
||||||
for (uint rowIx = slice.start; rowIx < slice.stop; rowIx++, mRowIx++)
|
for (int rowIx = slice.start; rowIx < slice.stop; rowIx++, mRowIx++) {
|
||||||
{
|
|
||||||
for (int colIx = 0; colIx < this.nCols; colIx++)
|
for (int colIx = 0; colIx < this.nCols; colIx++)
|
||||||
this.data[rowIx, colIx] = m.data[mRowIx, colIx];
|
this.data[rowIx, colIx] = m.data[mRowIx, colIx];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateSlice(Slice rowRange, Slice colRange, Matrix2 m)
|
public void UpdateSlice(Slice rowRange, Slice colRange, Matrix2 m)
|
||||||
{
|
{
|
||||||
UpdateSlice((rowRange.start, rowRange.stop), (colRange.start, colRange.stop), m);
|
UpdateSlice((rowRange.start, rowRange.stop), (colRange.start, colRange.stop), m);
|
||||||
}
|
}
|
||||||
public void UpdateSlice((uint start, uint stop) rowRange, (uint start, uint stop) colRange, Matrix2 m)
|
public void UpdateSlice((int start, int stop) rowRange, (int start, int stop) colRange, Matrix2 m)
|
||||||
{
|
{
|
||||||
for (uint i = rowRange.start; i < rowRange.stop; i++)
|
for (int i = rowRange.start; i < rowRange.stop; i++)
|
||||||
{
|
{
|
||||||
for (uint j = colRange.start; j < colRange.stop; j++)
|
for (int j = colRange.start; j < colRange.stop; j++)
|
||||||
this.data[i, j] = m.data[i - rowRange.start, j - colRange.start];
|
this.data[i, j] = m.data[i - rowRange.start, j - colRange.start];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -369,7 +416,7 @@ namespace LinearAlgebra
|
|||||||
{
|
{
|
||||||
Matrix2 A = this;
|
Matrix2 A = this;
|
||||||
// unchecked
|
// unchecked
|
||||||
uint n = A.nRows;
|
int n = A.nRows;
|
||||||
|
|
||||||
// Create an identity matrix of the same size as the original matrix
|
// Create an identity matrix of the same size as the original matrix
|
||||||
float[,] augmentedMatrix = new float[n, 2 * n];
|
float[,] augmentedMatrix = new float[n, 2 * n];
|
||||||
@ -404,10 +451,10 @@ namespace LinearAlgebra
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Back substitution
|
// Back substitution
|
||||||
for (uint i = n - 1; i >= 0; i--)
|
for (int i = n - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
// Eliminate the column above the pivot
|
// Eliminate the column above the pivot
|
||||||
for (uint j = i - 1; j >= 0; j--)
|
for (int j = i - 1; j >= 0; j--)
|
||||||
{
|
{
|
||||||
float factor = augmentedMatrix[j, i];
|
float factor = augmentedMatrix[j, i];
|
||||||
for (int k = 0; k < 2 * n; k++)
|
for (int k = 0; k < 2 * n; k++)
|
||||||
@ -428,7 +475,7 @@ namespace LinearAlgebra
|
|||||||
|
|
||||||
public float Determinant()
|
public float Determinant()
|
||||||
{
|
{
|
||||||
uint n = this.nRows;
|
int n = this.nRows;
|
||||||
if (n != this.nCols)
|
if (n != this.nCols)
|
||||||
throw new System.ArgumentException("Matrix must be square.");
|
throw new System.ArgumentException("Matrix must be square.");
|
||||||
|
|
||||||
@ -448,7 +495,7 @@ namespace LinearAlgebra
|
|||||||
// Helper function to compute the minor of a matrix
|
// Helper function to compute the minor of a matrix
|
||||||
private Matrix2 Minor(int rowToRemove, int colToRemove)
|
private Matrix2 Minor(int rowToRemove, int colToRemove)
|
||||||
{
|
{
|
||||||
uint n = this.nRows;
|
int n = this.nRows;
|
||||||
float[,] minor = new float[n - 1, n - 1];
|
float[,] minor = new float[n - 1, n - 1];
|
||||||
|
|
||||||
int r = 0, c = 0;
|
int r = 0, c = 0;
|
||||||
@ -469,15 +516,46 @@ namespace LinearAlgebra
|
|||||||
|
|
||||||
return new Matrix2(minor);
|
return new Matrix2(minor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Matrix2 DeleteRows(Matrix2 A, Slice rowRange) {
|
||||||
|
float[,] result = new float[A.nRows - (rowRange.stop - rowRange.start), A.nCols];
|
||||||
|
|
||||||
|
int resultRowIx = 0;
|
||||||
|
for (int i = 0; i < A.nRows; i++) {
|
||||||
|
if (i >= rowRange.start && i < rowRange.stop)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (int j = 0; j < A.nCols; j++)
|
||||||
|
result[resultRowIx, j] = A.data[i, j];
|
||||||
|
|
||||||
|
resultRowIx++;
|
||||||
|
}
|
||||||
|
return new Matrix2(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static Matrix2 DeleteColumns(Matrix2 A, Slice colRange) {
|
||||||
|
float[,] result = new float[A.nRows, A.nCols - (colRange.stop - colRange.start)];
|
||||||
|
|
||||||
|
for (int i = 0; i < A.nRows; i++) {
|
||||||
|
int resultColIx = 0;
|
||||||
|
for (int j = 0; j < A.nCols; j++) {
|
||||||
|
if (j >= colRange.start && j < colRange.stop)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
result[i, resultColIx++] = A.data[i, j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new Matrix2(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Matrix1
|
public class Matrix1
|
||||||
{
|
{
|
||||||
public float[] data { get; }
|
public float[] data { get; }
|
||||||
|
|
||||||
public uint size => (uint)data.GetLength(0);
|
public int size => data.GetLength(0);
|
||||||
|
|
||||||
public Matrix1(uint size)
|
public Matrix1(int size)
|
||||||
{
|
{
|
||||||
this.data = new float[size];
|
this.data = new float[size];
|
||||||
}
|
}
|
||||||
@ -487,7 +565,7 @@ namespace LinearAlgebra
|
|||||||
this.data = data;
|
this.data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Matrix1 Zero(uint size)
|
public static Matrix1 Zero(int size)
|
||||||
{
|
{
|
||||||
return new Matrix1(size);
|
return new Matrix1(size);
|
||||||
}
|
}
|
||||||
@ -604,6 +682,18 @@ namespace LinearAlgebra
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Matrix1 operator -(Matrix1 A, Matrix1 B) {
|
||||||
|
if (A.size != B.size)
|
||||||
|
throw new System.ArgumentException("Size of A must match size of B.");
|
||||||
|
|
||||||
|
float[] result = new float[A.size];
|
||||||
|
|
||||||
|
for (int i = 0; i < A.size; i++) {
|
||||||
|
result[i] = A.data[i] - B.data[i];
|
||||||
|
}
|
||||||
|
return new Matrix1(result);
|
||||||
|
}
|
||||||
|
|
||||||
public static Matrix1 operator *(Matrix1 A, float f)
|
public static Matrix1 operator *(Matrix1 A, float f)
|
||||||
{
|
{
|
||||||
float[] result = new float[A.size];
|
float[] result = new float[A.size];
|
||||||
@ -618,18 +708,35 @@ namespace LinearAlgebra
|
|||||||
return A * f;
|
return A * f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Matrix1 operator /(Matrix1 A, float f) {
|
||||||
|
float[] result = new float[A.size];
|
||||||
|
|
||||||
|
for (int i = 0; i < A.size; i++)
|
||||||
|
result[i] = A.data[i] / f;
|
||||||
|
|
||||||
|
return new Matrix1(result);
|
||||||
|
}
|
||||||
|
public static Matrix1 operator /(float f, Matrix1 A) {
|
||||||
|
float[] result = new float[A.size];
|
||||||
|
|
||||||
|
for (int i = 0; i < A.size; i++)
|
||||||
|
result[i] = f / A.data[i];
|
||||||
|
|
||||||
|
return new Matrix1(result);
|
||||||
|
}
|
||||||
|
|
||||||
public Matrix1 Slice(Slice range)
|
public Matrix1 Slice(Slice range)
|
||||||
{
|
{
|
||||||
return Slice(range.start, range.stop);
|
return Slice(range.start, range.stop);
|
||||||
}
|
}
|
||||||
public Matrix1 Slice(uint from, uint to)
|
public Matrix1 Slice(int from, int to)
|
||||||
{
|
{
|
||||||
if (from < 0 || to >= this.size)
|
if (from < 0 || to >= this.size)
|
||||||
throw new System.ArgumentException("Slice index out of range.");
|
throw new System.ArgumentException("Slice index out of range.");
|
||||||
|
|
||||||
float[] result = new float[to - from];
|
float[] result = new float[to - from];
|
||||||
int resultIx = 0;
|
int resultIx = 0;
|
||||||
for (uint ix = from; ix < to; ix++)
|
for (int ix = from; ix < to; ix++)
|
||||||
result[resultIx++] = this.data[ix];
|
result[resultIx++] = this.data[ix];
|
||||||
|
|
||||||
return new Matrix1(result);
|
return new Matrix1(result);
|
||||||
@ -637,7 +744,7 @@ namespace LinearAlgebra
|
|||||||
public void UpdateSlice(Slice slice, Matrix1 v)
|
public void UpdateSlice(Slice slice, Matrix1 v)
|
||||||
{
|
{
|
||||||
int vIx = 0;
|
int vIx = 0;
|
||||||
for (uint ix = slice.start; ix < slice.stop; ix++, vIx++)
|
for (int ix = slice.start; ix < slice.stop; ix++, vIx++)
|
||||||
this.data[ix] = v.data[vIx];
|
this.data[ix] = v.data[vIx];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,24 +3,26 @@ using System;
|
|||||||
using Quaternion = UnityEngine.Quaternion;
|
using Quaternion = UnityEngine.Quaternion;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace LinearAlgebra
|
namespace LinearAlgebra {
|
||||||
{
|
|
||||||
|
|
||||||
public class QuaternionOf<T>
|
public class QuaternionOf<T> {
|
||||||
{
|
|
||||||
public T x;
|
public T x;
|
||||||
public T y;
|
public T y;
|
||||||
public T z;
|
public T z;
|
||||||
public T w;
|
public T w;
|
||||||
|
|
||||||
public QuaternionOf(T x, T y, T z, T w)
|
public QuaternionOf(T x, T y, T z, T w) {
|
||||||
{
|
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.z = z;
|
this.z = z;
|
||||||
this.w = w;
|
this.w = w;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Quaternion Reflect(Quaternion q) {
|
||||||
|
return new(-q.x, -q.y, -q.z, q.w);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#if UNITY_5_3_OR_NEWER
|
#if UNITY_5_3_OR_NEWER
|
||||||
public static Matrix2 ToRotationMatrix(Quaternion q) {
|
public static Matrix2 ToRotationMatrix(Quaternion q) {
|
||||||
float w = q.x, x = q.y, y = q.z, z = q.w;
|
float w = q.x, x = q.y, y = q.z, z = q.w;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
#if UNITY_5_3_OR_NEWER
|
#if UNITY_5_3_OR_NEWER
|
||||||
using Unity.VisualScripting;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace RoboidControl.Unity {
|
namespace RoboidControl.Unity {
|
||||||
|
@ -17,7 +17,7 @@ namespace RoboidControl {
|
|||||||
/// <param name="participant">The participant for with the sensor is needed</param>
|
/// <param name="participant">The participant for with the sensor is needed</param>
|
||||||
/// <param name="networkId">The network ID of the sensor</param>
|
/// <param name="networkId">The network ID of the sensor</param>
|
||||||
/// <param name="thingId">The ID of the thing</param>
|
/// <param name="thingId">The ID of the thing</param>
|
||||||
public TemperatureSensor(LocalParticipant participant, byte networkId, byte thingId) : base(participant, networkId, thingId, (byte)Type.TemperatureSensor) { }
|
public TemperatureSensor(Participant participant, byte networkId, byte thingId) : base(participant, networkId, thingId, (byte)Type.TemperatureSensor) { }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Function to extract the temperature received in the binary message
|
/// Function to extract the temperature received in the binary message
|
||||||
|
Loading…
x
Reference in New Issue
Block a user