Permalänk
Medlem

Fel på triangel i java

Hej!

Ska skriva ett program i java där man kan rita upp fyrkanter, trianglar och cirklar. Problemet är att trianglarna jag ritar upp inte blir riktigt som de ska.
De ska vara liksidiga, men blir väldigt "låga" av någon anledning. Är det någon som kan se felet i koden? Använder mig av en del importerade klasser och arv, så om ni behöver koden till någon annan klass så får ni gärna fråga :). Tack för all hjälp!

import java.lang.Math; import se.lth.cs.ptdc.window.SimpleWindow; import se.lth.cs.ptdc.shapes.Shape; public class Triangle extends Shape { private int side; private double height; protected Triangle(int x, int y, int side) { super(x, y); this.side = side; } public void draw(SimpleWindow w) { w.moveTo(x, y); w.lineTo(x + side, y); this.height = Math.sqrt(((side ^ 2) - ((side / 2) ^ 2))); w.lineTo((x + (side / 2)), (y - (int) height)); w.lineTo(x, y); } }

Permalänk
Medlem

Om sidorna är 2 så är höjden roten ur 3.
Kolla med debugging om det stämmer, det borde iof stämma, ser ut som om du gjort rätt.

Tänk även på att du du castar height till int vilket gör att alla decimaler "skalas bort" (avrundas ej). Så i detta fall hade den fått höjden 1 istället för 1,7!

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av Gnejs:

Om sidorna är 2 så är höjden roten ur 3.

Hmm, förstår inte riktigt vad du menar. Sidorna bestäms av variablen "side" och räknas i pixlar. En triangel där alla sidor har längden 100
borde enligt pythagoras sats ha höjden:

sqrt (100^2 - 50^2) = 86.6...

Eller har jag helt fel för mig?

Edit: Läste ditt inlägg fel, inser att du menade samma sak som jag. Avrundningen spelar ingen större roll, då det rör sig om flera hundra pixlar.

Permalänk
Medlem
Skrivet av Balper:

Hmm, förstår inte riktigt vad du menar. Sidorna bestäms av variablen "side" och räknas i pixlar. En triangel där alla sidor har längden 100
borde enligt pythagoras sats ha höjden:

sqrt (100^2 - 50^2) = 86.6...

Eller har jag helt fel för mig?

Edit: Läste ditt inlägg fel, inser att du menade samma sak som jag. Avrundningen spelar ingen större roll, då det rör sig om flera hundra pixlar.

int side = 100; double height = Math.sqrt(((side ^ 2) - ((side / 2) ^ 2))); System.out.println("Side: "+side + " Height: "+ height);

Output:

Side: 100 Height: 7.3484692283495345

Nåt är inte rätt

^ är ingen höjdare

int a = side; double b = a/2 double height = Math.sqrt(Math.pow(a, 2) - Math.pow(b, 2));

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk

^-tecknet är en s.k. bitwise XOR operator

Permalänk
Medlem

Ah! Så klart, när jag skrev det tänkte jag till och med på att jag skulle kolla upp hur jag skulle skriva kvadreringen! Tack för hjälpen!