[Java] Hoe te roteren

Pagina: 1
Acties:

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik ben hier op mijn college bezig met Java en nu moeten wij dus een simpel viguurtje tekenen. Alleen nu willen ze dat we de andere 3 armen dmv rotate maken. Alleen wij (20 man) snappen daar dus echt de *** van.

Zijn hier mensen die mij snel kunnen uitleggen hoe ik dat moet doen. De code die we tot nu toe hebben is dit:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import element.*;

public class Mill
{
 public static void main(String args[])
 {
    ConsoleWindow c = new ConsoleWindow();                                // standaard console window opent
    int length;

    c.out.println("Enter the cooridinates of l:");                        // waarde van l ingeven
    length = c.input.readInt();                                           // waarde van l uitlezen
        DrawingWindow d = new DrawingWindow((int)3*length,(int)3*length);     // een drawingwindow opent zich 1.5 maal zo groot

    d.moveTo((int)(1.5*length), (int)(1.5*length));                         // move to center of window
    d.line(0,(int)(-length));                                               // teken lijn naar boven
        d.line((int)(0.2*length),0);                                            // teken lijn naar rechts
        d.line(0,(int)(0.7*length));                                            // teken lijn naar beneden
        d.line((int)(-0.2*length),0);                                           // teken lijn naar links
        d.moveTo(0,(int)(0.3*length));                                          //terug naar het centerpunt
 }
}


Btw dit werkt waarschijnlijk niet op jullie java omdat hier een import van element in zit en die is speciaal voor ons aangemaakt zodat wij niet onze windows zelf hoeven te definieren. ()Boek heet ook "Java elements.")

Op http://www.mhhe.com/javaelements is die module te kijrgen.

Ik dnek dat iedereen wle snapt dat het tekeningetje wat ik dus 3 maal wil draaien zodat ik een kruis vorm krijg het volgende gedeelte van de code is;

Java:
1
2
3
4
5
6
d.moveTo((int)(1.5*length), (int)(1.5*length));                         // move to center of window
    d.line(0,(int)(-length));                                               // teken lijn naar boven
        d.line((int)(0.2*length),0);                                            // teken lijn naar rechts
        d.line(0,(int)(0.7*length));                                            // teken lijn naar beneden
        d.line((int)(-0.2*length),0);                                           // teken lijn naar links
        d.moveTo(0,(int)(0.3*length));                                          //terug naar het centerpunt


Ik hoop dat er mensne zijn die mij kunnen helpen

[ Voor 3% gewijzigd door BSeB op 11-04-2003 13:55 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:01

Janoz

Moderator Devschuur®

!litemod

Tja, roteren kan op vele manieren. Wat is jullie uitgelegd? Wat staat er in het boek? Wat snap je er niet aan? Is de werking van de sinus en de cosinus jullie duidelijk?

(ps: gebruike [code=java] met bijbehorende sluitgtag voor je java code. Die zijn daar voor bedoeld :) )

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

sinus en cosinus.
de rest moet je zelf maar uitzoeken

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik weet dat het met behulp van matrix en assen kan maar dit is ingewikkeld en nog niet voor ons.

Verder moeten we het idd met cosinus en sinus doen maar hoe I don't now

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:01

Janoz

Moderator Devschuur®

!litemod

Assen? Hoe kun je in het 2D vlak nu om een as draaien??

Daarnaast, matrices zijn niet zo lastig ;). Het is gewoon een manier om de normaal gebruikte functies samen te voegen in 1 bewerking. Eigenlijk wordt nog steeds exact hetzelfde berekend.

Wat begrijp je niet van de sinus en de cosinus? Ik kan de complete formules wel voor gaan kauwen, maar daar hebben jullie waarschijnlijk erg weinig aan. Het belangrijkste bij programmeren (en wiskunde in dit geval, dit probleem heeft in principe erg weinig met java te maken) is dat je het zelf probeert en stap voor stap begrijpt waar je mee bezig bent. Dat is dan ook wat hier in P&W (en de rest van de devschuur) gepredikt wordt.

Ga eens stoeien met de sinus en de cosinus. Wat gebeurt er als je voor de x de het midden + de sinus invuld, en voor de y het midden voor de cosinus en vervolgens de hoek laat veranderen? (let op dat die hoek overal behalve op de middelbare school in radialen ipv graden wordt gegeven)

[ Voor 18% gewijzigd door Janoz op 09-04-2003 12:06 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
de Z-as natuurlijk...

x = cos(angle)*x+offsetx;
y = sin(angle)*y+offsety;

dit werkt perfect als x-y coordinaten zijn en je rond (0,0) draait.

[ Voor 45% gewijzigd door Janoz op 09-04-2003 14:15 . Reden: Fuck.. als je als mod een vergissing maakt tussen de edit en de quote knop heeft dat nog vreemdere gevolgen....... ]


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ok, thnx dat moest ik hebben het werkt nu:

Java:
1
2
3
4
5
6
7
8
        {
        d.moveTo((3*l)/2,(3*l)/2);
        d.line((int)Math.cos(angle)*l,(int)Math.sin(angle)*l);
        d.line((int)-(0.2*Math.sin(angle)*l),(int)(0.2*Math.cos(angle)*l));
        d.line((int)-(0.7*Math.cos(angle)*l),(int)-(0.7*Math.sin(angle)*l));
        d.line((int)(0.2*Math.sin(angle)*l),(int)-(0.2*Math.cos(angle)*l));
        angle = angle + 0.5*Math.PI;
        }

[ Voor 3% gewijzigd door BSeB op 11-04-2003 13:56 ]


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
BSeB schreef op 09 April 2003 @ 12:34:
Ok, thnx dat moest ik hebben het werkt nu:


{
d.moveTo((3*l)/2,(3*l)/2);
d.line((int)Math.cos(angle)*l,(int)Math.sin(angle)*l);
d.line((int)-(0.2*Math.sin(angle)*l),(int)(0.2*Math.cos(angle)*l));
d.line((int)-(0.7*Math.cos(angle)*l),(int)-(0.7*Math.sin(angle)*l));
d.line((int)(0.2*Math.sin(angle)*l),(int)-(0.2*Math.cos(angle)*l));
angle = angle + 0.5*Math.PI;
}
ik denk dat de bedoeling is dat je de coordinaten in een array steekt en dan de array roteert , ook gek is dat je cos/sin afwisseld per punt?... nu ja jij ziet wel of her werkt of niet...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:01

Janoz

Moderator Devschuur®

!litemod

hobbit_be schreef op 09 April 2003 @ 12:29:
de Z-as natuurlijk...

x = cos(angle)*x+offsetx;
y = sin(angle)*y+offsety;

dit werkt perfect als x-y coordinaten zijn en je rond (0,0) draait.
In een 2d vlak bestaat geen z-as ;). In 2d kun je enkel om een punt draaien

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • WildernessChild
  • Registratie: Februari 2002
  • Niet online

WildernessChild

Voor al uw hersenspinsels

't Is natuurlijk handiger om Java het werk te laten doen, m.b.v. een Polygon en een AffineTransform. Staat wel in de Java docs.

Maker van Taekwindow; verplaats en resize je vensters met de Alt-toets!


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:56

.oisyn

Moderator Devschuur®

Demotivational Speaker

Janoz schreef op 09 april 2003 @ 14:14:
In 2d kun je enkel om een punt draaien
nou je kunt ook wel om een as draaien (een as die in het x,y vlak ligt bedoel ik dan), maar de vraag is in hoeverre je dat draaien kunt noemen (je schaalt eigenlijk) :P

.edit: hmm, nou bedenk ik me ineens...
In 2D kun je roteren om een punt, je hebt dan 1 vrijheids-graad* .oisyn
In 3D kun je roteren om een punt, waarbij je 2 vrijheids-graden hebt, of roteren om een as, waar je 1 vrijheids-graad hebt

Een simpele inductie levert dan op dat je in 4D kunt roteren om een punt met 3 vrijheids-graden (da's logisch), of om een as met 2 vrijheidsgraden, of om een (2d) vlak

Nou kan ik me er absoluut geen voorstelling van maken hoe je in hemelsnaam roteert om een vlak, noch hoe je roteert over een as met 2 vrijheids-graden :P

* .oisyn ik noem het maar even vrijheids-graden, naar de vrije vertaling van "degrees of freedom". Ik bedoel dus dat de rotatie een getal in Rn voorstelt, waarbij n dus het aantal vrijheidsgraden is

[ Voor 61% gewijzigd door .oisyn op 09-04-2003 15:00 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
.oisyn schreef op 09 april 2003 @ 14:51:
[...]
Nou kan ik me er absoluut geen voorstelling van maken hoe je in hemelsnaam roteert om een vlak, noch hoe je roteert over een as met 2 vrijheids-graden :P

* hobbit_be ik noem het maar even vrijheids-graden, naar de vrije vertaling van "degrees of freedom". Ik bedoel dus dat de rotatie een getal in Rn voorstelt, waarbij n dus het aantal vrijheidsgraden is
hmm als jij een 4D wereld kan voorstellen (laat staan een rotatie rond een vlak) dan ben jij de eerste ter wereld - 4D is niet voor te stellen behalve in mathematics (sommige 'voelen het aan')(xD) dus ik zou me maar niet te erg voelen :). ivm de z-axis op een 2D vlak das puur een kwestie van hoe je het voorstelt: het 'punt' op een 2d vlak waarrond je draait is de intersectie van de normaal (axis) op dat punt met het vlak. Maar puur gezien heb je wel gelijk dat er geen z-axis is.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:56

.oisyn

Moderator Devschuur®

Demotivational Speaker

hobbit_be schreef op 09 April 2003 @ 15:19:
[...]


hmm als jij een 4D wereld kan voorstellen (laat staan een rotatie rond een vlak) dan ben jij de eerste ter wereld - 4D is niet voor te stellen behalve in mathematics
dat lijkt me onjuist. Het is in principe net als ruimtelijk denken: dat kan ook niet iedereen even goed, en bovendien is dat te trainen. Volgens mij geldt dat ook voor 4D, zei het wat moeilijker. Ik kan me niet voorstellen dat er niemand is op de wereld die zich er een goede voorstelling van kan maken.

Simpele 4D dingen kan ik me ook voorstellen, met veel moeite weliswaar. Alleen rotaties gaan me net iets te ver


Janoz: ik zei het over ICQ ook al, maar je moet je volume renderer eens gebruiken om 4d raytrace-data te renderen :) Want in plaats van een 2d grid van pixels zoals je bij een 3d renderer hebt, heb je bij een 4d renderer een 3d grid van pixels (voxels dus eigenlijk), waarbij je voor elke voxel een 4d ray afschiet vanuit het oogpunt die door die voxel gaat. De rest van de methoden gaat in principe als bij een 3d raytracer, dus snijpunten berekenen van een straal met een object, en dat proces recursief uitvoeren voor reflection, refraction en om te kijken of een punt belicht wordt door bepaalde lichten. Vervelende alleen is dat de normale 3d polygonen data nu tetrahedrons zijn, wat voor de snijpuntberekening nogal lastig kan zijn. Maar misschien moet je je dan gewoon beperken tot hyperspheres en hyperplanes, en misschien nog wat andere 4d primitieven

[ Voor 3% gewijzigd door .oisyn op 09-04-2003 16:32 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1