16cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams/*
26a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye * Copyright (C) 2013 The Android Open Source Project
36cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams *
46cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
56cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams * you may not use this file except in compliance with the License.
66cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams * You may obtain a copy of the License at
76cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams *
86cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
96cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams *
106cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams * Unless required by applicable law or agreed to in writing, software
116cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
126cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams * See the License for the specific language governing permissions and
146cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams * limitations under the License.
156cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams */
166cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams
176cc888e77e17ac522f75bf61403307de8ace2ef3Jason Samspackage android.renderscript;
186cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams
199c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
206a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye * Vector version of the basic double type.
216a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye * Provides three double fields packed.
226a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye */
236cc888e77e17ac522f75bf61403307de8ace2ef3Jason Samspublic class Double3 {
246a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public double x;
256a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public double y;
266a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public double z;
276a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
286cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams    public Double3() {
296cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams    }
306a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide */
316a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public Double3(Double3 data) {
326a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x = data.x;
336a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y = data.y;
346a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.z = data.z;
356a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
366cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams
376a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public Double3(double x, double y, double z) {
386a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x = x;
396a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y = y;
406a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.z = z;
416cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams    }
426cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams
436a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
446a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector add
456a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
466a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
476a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
486a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
496a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
506a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Double3 add(Double3 a, Double3 b) {
516a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Double3 res = new Double3();
526a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.x = a.x + b.x;
536a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.y = a.y + b.y;
546a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.z = a.z + b.z;
556a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
566a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return res;
576a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
586a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
596a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
606a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector add
616a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
626a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
636a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
646a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void add(Double3 value) {
656a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x += value.x;
666a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y += value.y;
676a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        z += value.z;
686a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
696a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
706a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
716a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector add
726a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
736a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
746a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
756a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void add(double value) {
766a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x += value;
776a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y += value;
786a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        z += value;
796a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
806cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams
816a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
826a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector add
836a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
846a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
856a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
866a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
876a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
886a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Double3 add(Double3 a, double b) {
896a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Double3 res = new Double3();
906a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.x = a.x + b;
916a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.y = a.y + b;
926a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.z = a.z + b;
936cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams
946a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return res;
956a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
966a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
976a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
986a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector subtraction
996a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1006a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
1016a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1026a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void sub(Double3 value) {
1036a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x -= value.x;
1046a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y -= value.y;
1056a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        z -= value.z;
1066a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1076a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1086a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1096a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector subtraction
1106a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1116a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
1126a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
1136a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
1146a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1156a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Double3 sub(Double3 a, Double3 b) {
1166a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Double3 res = new Double3();
1176a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.x = a.x - b.x;
1186a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.y = a.y - b.y;
1196a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.z = a.z - b.z;
1206a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1216a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return res;
1226a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1236a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1246a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1256a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector subtraction
1266a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1276a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
1286a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1296a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void sub(double value) {
1306a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x -= value;
1316a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y -= value;
1326a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        z -= value;
1336a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1346a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1356a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1366a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector subtraction
1376a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1386a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
1396a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
1406a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
1416a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1426a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Double3 sub(Double3 a, double b) {
1436a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Double3 res = new Double3();
1446a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.x = a.x - b;
1456a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.y = a.y - b;
1466a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.z = a.z - b;
1476a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1486a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return res;
1496a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1506a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1516a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1526a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector multiplication
1536a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1546a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
1556a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1566a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void mul(Double3 value) {
1576a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x *= value.x;
1586a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y *= value.y;
1596a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        z *= value.z;
1606a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1616a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1626a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1636a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector multiplication
1646a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1656a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
1666a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
1676a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
1686a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1696a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Double3 mul(Double3 a, Double3 b) {
1706a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Double3 res = new Double3();
1716a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.x = a.x * b.x;
1726a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.y = a.y * b.y;
1736a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.z = a.z * b.z;
1746a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1756a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return res;
1766a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1776a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1786a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1796a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector multiplication
1806a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1816a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
1826a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1836a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void mul(double value) {
1846a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x *= value;
1856a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y *= value;
1866a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        z *= value;
1876a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1886cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams
1896a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1906a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector multiplication
1916a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1926a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
1936a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
1946a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
1956a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1966a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Double3 mul(Double3 a, double b) {
1976a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Double3 res = new Double3();
1986a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.x = a.x * b;
1996a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.y = a.y * b;
2006a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.z = a.z * b;
2016cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams
2026a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return res;
2036a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2046a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2056a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2066a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector division
2076a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2086a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
2096a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2106a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void div(Double3 value) {
2116a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x /= value.x;
2126a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y /= value.y;
2136a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        z /= value.z;
2146a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2156a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2166a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2176a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector division
2186a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2196a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2206a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
2216a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
2226a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2236a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Double3 div(Double3 a, Double3 b) {
2246a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Double3 res = new Double3();
2256a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.x = a.x / b.x;
2266a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.y = a.y / b.y;
2276a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.z = a.z / b.z;
2286a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2296a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return res;
2306a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2316a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2326a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2336a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector division
2346a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2356a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
2366a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2376a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void div(double value) {
2386a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x /= value;
2396a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y /= value;
2406a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        z /= value;
2416a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2426a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2436a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2446a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector division
2456a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2466a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2476a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
2486a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
2496a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2506a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Double3 div(Double3 a, double b) {
2516a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Double3 res = new Double3();
2526a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.x = a.x / b;
2536a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.y = a.y / b;
2546a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        res.z = a.z / b;
2556a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2566a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return res;
2576a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2586a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2596a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2606a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector dot Product
2616a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2626a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2636a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
2646a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2656a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public double dotProduct(Double3 a) {
2666a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return (x * a.x) + (y * a.y) + (z * a.z);
2676a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2686a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2696a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2706a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector dot Product
2716a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2726a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2736a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
2746a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
2756a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2766a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static double dotProduct(Double3 a, Double3 b) {
2776a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return (b.x * a.x) + (b.y * a.y) + (b.z * a.z);
2786a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2796a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2806a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2816a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector add Multiple
2826a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2836a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2846a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param factor
2856a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2866a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void addMultiple(Double3 a, double factor) {
2876a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x += a.x * factor;
2886a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y += a.y * factor;
2896a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        z += a.z * factor;
2906a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2916a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2926a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2936a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Set vector value by double3
2946a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2956a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2966a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2976a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void set(Double3 a) {
2986a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x = a.x;
2996a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y = a.y;
3006a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.z = a.z;
3016a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3026a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3036a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3046a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Set vector negate
3056a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3066a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void negate() {
3076a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x = -x;
3086a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y = -y;
3096a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        z = -z;
3106a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3116a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3126a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3136a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Get vector length
3146a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3156a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
3166a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3176a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public int length() {
3186a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return 3;
3196a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3206a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3216a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3226a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Return the element sum of vector
3236a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3246a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
3256a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3266a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public double elementSum() {
3276a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return x + y + z;
3286a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3296a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3306a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3316a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Get the vector field value by index
3326a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3336a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param i
3346a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
3356a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3366a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public double get(int i) {
3376a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        switch (i) {
3386a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 0:
3396a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return x;
3406a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 1:
3416a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return y;
3426a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 2:
3436a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return z;
3446a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        default:
3456a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            throw new IndexOutOfBoundsException("Index: i");
3466a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        }
3476a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3486a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3496a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3506a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Set the vector field value by index
3516a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3526a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param i
3536a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
3546a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3556a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void setAt(int i, double value) {
3566a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        switch (i) {
3576a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 0:
3586a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            x = value;
3596a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return;
3606a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 1:
3616a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            y = value;
3626a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return;
3636a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 2:
3646a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            z = value;
3656a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return;
3666a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        default:
3676a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            throw new IndexOutOfBoundsException("Index: i");
3686a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        }
3696a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3706a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3716a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3726a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Add the vector field value by index
3736a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3746a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param i
3756a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
3766a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3776a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void addAt(int i, double value) {
3786a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        switch (i) {
3796a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 0:
3806a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            x += value;
3816a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return;
3826a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 1:
3836a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            y += value;
3846a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return;
3856a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 2:
3866a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            z += value;
3876a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return;
3886a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        default:
3896a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            throw new IndexOutOfBoundsException("Index: i");
3906a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        }
3916a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3926a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3936a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3946a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Set the vector field value
3956a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3966a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param x
3976a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param y
3986a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param z
3996a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
4006a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void setValues(double x, double y, double z) {
4016a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x = x;
4026a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y = y;
4036a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.z = z;
4046a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
4056a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
4066a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
4076a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Copy the vector to double array
4086a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
4096a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param data
4106a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param offset
4116a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
4126a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void copyTo(double[] data, int offset) {
4136a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        data[offset] = x;
4146a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        data[offset + 1] = y;
4156a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        data[offset + 2] = z;
4166a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
4176a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye}
418