mirror of
https://github.com/penpot/penpot.git
synced 2026-02-13 07:02:58 +00:00
WIP
This commit is contained in:
133
backend/dev/java/app/Experiments.java
Normal file
133
backend/dev/java/app/Experiments.java
Normal file
@@ -0,0 +1,133 @@
|
||||
package app;
|
||||
|
||||
import clojure.lang.Seqable;
|
||||
import clojure.lang.RT;
|
||||
import clojure.lang.ISeq;
|
||||
import clojure.lang.ILookup;
|
||||
import clojure.lang.Keyword;
|
||||
|
||||
|
||||
// static public double[] multiply(final double[] m1, final double m2[]) {
|
||||
// var result = new double[6];
|
||||
// result[0] = (m1[0] * m2[0]) + (m1[2] * m2[1]);
|
||||
// result[1] = (m1[1] * m2[0]) + (m1[3] * m2[1]);
|
||||
// result[2] = (m1[0] * m2[2]) + (m1[2] * m2[3]);
|
||||
// result[3] = (m1[1] * m2[2]) + (m1[3] * m2[3]);o
|
||||
|
||||
// result[4] = (m1[0] * m2[4]) + (m1[2] * m2[5]) + m1[4];
|
||||
// result[5] = (m1[1] * m2[4]) + (m1[3] * m2[5]) + m1[5];
|
||||
// return result;
|
||||
// }
|
||||
|
||||
|
||||
public class Experiments {
|
||||
static public class Matrix implements Seqable, ILookup {
|
||||
public final double[] buff;
|
||||
|
||||
public Matrix(double a, double b, double c, double d, double e, double f) {
|
||||
buff = new double[6];
|
||||
buff[0] = a;
|
||||
buff[1] = b;
|
||||
buff[2] = c;
|
||||
buff[3] = d;
|
||||
buff[4] = e;
|
||||
buff[5] = f;
|
||||
}
|
||||
|
||||
public Matrix(final double [] otherBuffer) {
|
||||
buff = otherBuffer;
|
||||
}
|
||||
|
||||
public ISeq seq() {
|
||||
return RT.seq(this.buff);
|
||||
}
|
||||
|
||||
public Double valAt(final Object key) {
|
||||
var name = ((Keyword) key).getName();
|
||||
switch(name) {
|
||||
case "a": return this.buff[0];
|
||||
case "b": return this.buff[1];
|
||||
case "c": return this.buff[2];
|
||||
case "d": return this.buff[3];
|
||||
case "e": return this.buff[4];
|
||||
default: return this.buff[5];
|
||||
}
|
||||
}
|
||||
|
||||
public Double valAt(final Object key, Object notFound) {
|
||||
throw new IllegalArgumentException("not supported");
|
||||
}
|
||||
}
|
||||
|
||||
static public Matrix create(double a, double b, double c, double d, double e, double f) {
|
||||
var buff = new double[6];
|
||||
buff[0] = a;
|
||||
buff[1] = b;
|
||||
buff[2] = c;
|
||||
buff[3] = d;
|
||||
buff[4] = e;
|
||||
buff[5] = f;
|
||||
return new Matrix(buff);
|
||||
}
|
||||
|
||||
static public Matrix multiply(final Matrix mt1, final Matrix mt2) {
|
||||
var result = new double[6];
|
||||
var m1 = mt1.buff;
|
||||
var m2 = mt1.buff;
|
||||
|
||||
result[0] = (m1[0] * m2[0]) + (m1[2] * m2[1]);
|
||||
result[1] = (m1[1] * m2[0]) + (m1[3] * m2[1]);
|
||||
result[2] = (m1[0] * m2[2]) + (m1[2] * m2[3]);
|
||||
result[3] = (m1[1] * m2[2]) + (m1[3] * m2[3]);
|
||||
result[4] = (m1[0] * m2[4]) + (m1[2] * m2[5]) + m1[4];
|
||||
result[5] = (m1[1] * m2[4]) + (m1[3] * m2[5]) + m1[5];
|
||||
return new Matrix(result);
|
||||
}
|
||||
|
||||
static private void multiplyMutating(final double[] m1, final double[] m2) {
|
||||
|
||||
var m1a = m1[0];
|
||||
var m1b = m1[1];
|
||||
var m1c = m1[2];
|
||||
var m1d = m1[3];
|
||||
var m1e = m1[4];
|
||||
var m1f = m1[5];
|
||||
|
||||
double[] result = m1;
|
||||
result[0] = (m1a * m2[0]) + (m1c * m2[1]);
|
||||
result[1] = (m1b * m2[0]) + (m1d * m2[1]);
|
||||
result[2] = (m1a * m2[2]) + (m1c * m2[3]);
|
||||
result[3] = (m1b * m2[2]) + (m1d * m2[3]);
|
||||
result[4] = (m1a * m2[4]) + (m1c * m2[5]) + m1e;
|
||||
result[5] = (m1b * m2[4]) + (m1d * m2[5]) + m1f;
|
||||
}
|
||||
|
||||
static public Matrix multiplyBulk(final Matrix m1) {
|
||||
return m1;
|
||||
}
|
||||
|
||||
static public Matrix multiplyBulk(final Matrix m1, final Matrix m2) {
|
||||
return multiply(m1, m2);
|
||||
}
|
||||
|
||||
static public Matrix multiplyBulk(final Matrix m1, final Matrix m2, final Matrix m3) {
|
||||
var result = multiply(m1, m2);
|
||||
multiplyMutating(result.buff, m3.buff);
|
||||
return result;
|
||||
}
|
||||
|
||||
static public Matrix multiplyBulk(final Matrix m1, final Matrix m2, final Matrix m3, final Matrix m4) {
|
||||
var result = multiply(m1, m2);
|
||||
multiplyMutating(result.buff, m3.buff);
|
||||
multiplyMutating(result.buff, m4.buff);
|
||||
return result;
|
||||
};
|
||||
|
||||
static public Matrix multiplyBulk(final Matrix m1, final Matrix m2, final Matrix m3, final Matrix m4, final Matrix m5) {
|
||||
var result = multiply(m1, m2);
|
||||
multiplyMutating(result.buff, m3.buff);
|
||||
multiplyMutating(result.buff, m4.buff);
|
||||
multiplyMutating(result.buff, m5.buff);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user