Forum » Programiranje » [Java-matematika] Računanje relativnega horizontalnega in vertikalnega kota v 3D
[Java-matematika] Računanje relativnega horizontalnega in vertikalnega kota v 3D
LightBit ::
Imam bolj matematični problem.
Rad bi izračunal horizontalen in vertikalen kot med dvema točkama v 3D prostoru, ampak ne znam matematike .
To imam sedaj, vendar ne deluje pravilno (v nekaterih primerih je prav):
Testi (pričakovano delovanje):
Rad bi izračunal horizontalen in vertikalen kot med dvema točkama v 3D prostoru, ampak ne znam matematike .
To imam sedaj, vendar ne deluje pravilno (v nekaterih primerih je prav):
public class Position { public double X; // meters public double Y; // meters public double Z; // meters public double HorizontalAngle; // -180 > 180 public double VerticalAngle; // -180 > 180 public Position(double x, double y, double z) { X = x; Y = y; Z = z; } public Position(double x, double y, double z, double horizontalAngle, double verticalAngle) { X = x; Y = y; Z = z; HorizontalAngle = horizontalAngle; VerticalAngle = verticalAngle; } public double horizontalAngle(Position p) { return Math.toDegrees(Math.atan2(p.X - X, (p.Y - Y) + (p.Z - Z) * Math.sin(VerticalAngle))) - HorizontalAngle; } public double verticalAngle(Position p) { return Math.toDegrees(Math.atan2(p.Z - Z, (p.Y - Y) + (p.X - X) * Math.sin(HorizontalAngle))) - VerticalAngle; } }
Testi (pričakovano delovanje):
import org.junit.Test; import static org.junit.Assert.*; public class PositionTest { @Test public void horizontalAngle_1() { Position a = new Position(1, 1, 1, 0, 0); Position b = new Position(1, 2, 1); assertEquals(0, a.horizontalAngle(b), 0); } @Test public void horizontalAngle_2() { Position a = new Position(1, 1, 1, 0, 45); Position b = new Position(1, 2, 2); assertEquals(0, a.horizontalAngle(b), 0); } @Test public void horizontalAngle_3() { Position a = new Position(1, 1, 1, 0, 90); Position b = new Position(1, 1, 2); assertEquals(0, a.horizontalAngle(b), 0); } @Test public void horizontalAngle_4() { Position a = new Position(1, 1, 1, 0, 180); Position b = new Position(1, 0, 1); assertEquals(0, a.horizontalAngle(b), 0); } @Test public void horizontalAngle_5() { Position a = new Position(1, 1, 1, 0, -45); Position b = new Position(1, 0, 0); assertEquals(0, a.horizontalAngle(b), 0); } @Test public void horizontalAngle_6() { Position a = new Position(1, 1, 1, 0, -90); Position b = new Position(1, 1, 0); assertEquals(0, a.horizontalAngle(b), 0); } @Test public void horizontalAngle_7() { Position a = new Position(1, 1, 1, 0, -180); Position b = new Position(1, 0, 1); assertEquals(0, a.horizontalAngle(b), 0); } @Test public void horizontalAngle_8() { Position a = new Position(1, 1, 1, 0, -180); Position b = new Position(1, 2, 1); assertEquals(-180, a.horizontalAngle(b), 0); } @Test public void verticalAngle_1() { Position a = new Position(1, 1, 1, 0, 0); Position b = new Position(1, 2, 1); assertEquals(0, a.verticalAngle(b), 0); } @Test public void verticalAngle_2() { Position a = new Position(1, 1, 1, 45, 0); Position b = new Position(2, 2, 1); assertEquals(0, a.verticalAngle(b), 0); } @Test public void verticalAngle_3() { Position a = new Position(1, 1, 1, 90, 0); Position b = new Position(1, 2, 1); assertEquals(0, a.verticalAngle(b), 0); } @Test public void verticalAngle_4() { Position a = new Position(1, 1, 1, 180, 0); Position b = new Position(1, 0, 1); assertEquals(0, a.verticalAngle(b), 0); } @Test public void verticalAngle_5() { Position a = new Position(1, 1, 1, -45, 0); Position b = new Position(0, 0, 1); assertEquals(0, a.verticalAngle(b), 0); } @Test public void verticalAngle_6() { Position a = new Position(1, 1, 1, -90, 0); Position b = new Position(0, 1, 1); assertEquals(0, a.verticalAngle(b), 0); } @Test public void verticalAngle_7() { Position a = new Position(1, 1, 1, -180, 0); Position b = new Position(1, 0, 1); assertEquals(0, a.verticalAngle(b), 0); } @Test public void verticalAngle_8() { Position a = new Position(1, 1, 1, 180, 0); Position b = new Position(1, 2, 1); assertEquals(180, a.verticalAngle(b), 0); } }
PositionTest.verticalAngle_4:117 expected:0.0 but was:180.0
PositionTest.verticalAngle_5:125 expected:0.0 but was:180.0
PositionTest.verticalAngle_7:141 expected:0.0 but was:180.0
PositionTest.verticalAngle_8:149 expected:180.0 but was:0.0
PositionTest.horizontalAngle_4:53 expected:0.0 but was:180.0
PositionTest.horizontalAngle_5:61 expected:0.0 but was:180.0
PositionTest.horizontalAngle_7:77 expected:0.0 but was:180.0
PositionTest.horizontalAngle_8:85 expected:-180.0 but was:0.0
Randomness ::
Rad bi izračunal horizontalen in vertikalen kot med dvema točkama v 3D prostoruTole boš moral malo bolje definirati, ker kot med dvema točkama načeloma ne obstaja.
otago ::
Lahko izracunas kot med koordinatnim sistemom (3-2-1, Bezugssystem) in 3D tocko, oz. razliko med koti.
LightBit ::
Ups, ja točka nima usmerjenosti.
Torej gre za usmerjen predmet.
Recimo na prvi poziciji je televizija, druga pozicija je pozicija gledalca. Rad bi pa izračunal pod kakšnim horizontalnim in vertikalnim kotom gledalec gleda televizijo.
Torej gre za usmerjen predmet.
Recimo na prvi poziciji je televizija, druga pozicija je pozicija gledalca. Rad bi pa izračunal pod kakšnim horizontalnim in vertikalnim kotom gledalec gleda televizijo.
LightBit ::
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Android zamenjava pogledovOddelek: Programiranje | 1074 (895) | c00L3r |
» | razložitev nekaterij elementov v visual studio 05Oddelek: Programiranje | 2106 (1911) | darkolord |
» | Glasbeni izrazi v angleščiniOddelek: Sedem umetnosti | 6457 (6071) | embe |
» | [c#] enostavna Igrca -> poraba procesorja 95%Oddelek: Programiranje | 2157 (1521) | elKaktus |
» | Kateri monitor?Oddelek: Kaj kupiti | 1579 (1430) | boštjan |