Package mikera.matrixx.impl

Source Code of mikera.matrixx.impl.VectorMatrixM3

package mikera.matrixx.impl;

import mikera.transformz.marker.ISpecialisedTransform;
import mikera.vectorz.AVector;
import mikera.vectorz.Vector3;

/**
* Specialised N*3 Matrix with Vector3 row components
*
* @author Mike
*
*/
public final class VectorMatrixM3 extends AVectorMatrix<Vector3>  implements ISpecialisedTransform  {
  private static final long serialVersionUID = -8148184725377519520L;

  private Vector3[] rowData;
 
  public VectorMatrixM3(int rowCount) {
    super(rowCount,3);
    rowData=new Vector3[rowCount];
    for (int i=0; i<rowCount; i++) {
      rowData[i]=new Vector3();
    }
  }
 
  private VectorMatrixM3(Vector3[] rows) {
    super(rows.length,3);
    this.rowData=rows;
  }
 
  @Override
  public void multiply(double factor) {
    for (Vector3 vector:rowData) {
      vector.scale(factor);
    }
  }
 
  @Override
  public void replaceRow(int i, AVector row) {
    replaceRow(i,(Vector3)row);
  }
 
  public void replaceRow(int i, Vector3 row) {
    rowData[i]=row;
  }

  @Override
  public double get(int row, int column) {
    return rowData[row].get(column);
  }

  @Override
  public void set(int row, int column, double value) {
    rowData[row].set(column,value);
  }
 
  @Override
  public double unsafeGet(int row, int column) {
    return rowData[row].unsafeGet(column);
  }

  @Override
  public void unsafeSet(int row, int column, double value) {
    rowData[row].unsafeSet(column,value);
  }
 
  @Override
  public Vector3 getRowView(int row) {
    return  rowData[row];
  }
 
  @Override
  public void transform(AVector source, AVector dest) {
    if (source instanceof Vector3) {transform((Vector3)source,dest); return;}
    super.transform(source,dest);
  }
 
  public void transform(Vector3 source, AVector dest) {
    for (int i=0; i<rows; i++) {
      dest.set(i,getRow(i).dotProduct(source));
    }
  }
 
  @Override
  public double calculateElement(int i, AVector inputVector) {
    assert(i<rows);
    Vector3 row=rowData[i];
    return row.dotProduct(inputVector);
  }
 
  @Override
  public boolean isSquare() {
    return rows==3;
  }
 
  @Override
  public VectorMatrixM3 clone() {
    VectorMatrixM3 m=new VectorMatrixM3(rowData.clone());
    for (int i=0; i<rows; i++) {
      m.rowData[i]=m.rowData[i].clone();
    }
    return m;
  }
 
  @Override
  public VectorMatrixM3 exactClone() {
    return clone();
  }

}
TOP

Related Classes of mikera.matrixx.impl.VectorMatrixM3

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.