Jos ohjelma pätkässä luodaan pisteitä "3D-avaruuteen" ja niitä pystyy liikuttamaan hiiri-ohjauksellla x-y-z suunnissa, niin kuinka ne saadaan pyörimään avaruudessa toistensa ympäri ?
Eli x toimii oikea/vasen, y toimii ylös/alas ja z toimii eteen/taakse, mutta ns. avaruuden pyöritys puuttuu. Kuinka tämä ominaisuus olisi helpoin/järkevin toteuttaa ?
Puuttuva pyöritys
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Puuttuva pyöritys
Yksinkertaisella matriisipyöräytyksellä:
Matriisi on taianomainen työkalu, jolla muodostetaan avaruuksien välisiä muunnoksia perustuen eri kantavektorijärjestelmiin. Niistä kannattanee koittaa löytää joku selkeä opas internetistä, ainakin omat selittäjän taitoni ovat ennenkin olleet kovilla näistä puhuttaessa :)
Code: Select all
SCREEN 640, 480
//alustetaan koordinaatit
Type point
Field x#
Field y#
Field z#
EndType
For i = 0 To 499
p.point = New(point)
p\x = Rnd(-1,1)
p\y = Rnd(-1,1)
p\z = Rnd(-1,1)
Next i
Repeat
//pyörityskulma sekä sen valmiiksi laskettavat sini ja kosini
ang# = ang + 1
cosa# = Cos(ang)
sina# = Sin(ang)
Lock
For p.point = Each point
//itse pyöritys, joka tapahtuu y-akselin ympäri (y-arvot eivät muutu)
x# = p\x*cosa + p\z*sina
z# =-p\x*sina + p\z*cosa
//projisoidaan piste
s# = 400.0/(z+3.0)
rx = x*s+320
ry = p\y*s+240
//piirretään sen kohdalle ruksi
Line rx-1, ry-1, rx+1, ry+1
Line rx-1, ry+1, rx+1, ry-1
Next p
Unlock
DrawScreen
Forever
Re: Puuttuva pyöritys
Kiitos koodaaja . Eiköhän tuosta ollut apua, kun ajatuksella käyn ohjelman läpi ja sovellan sen ideaani.
Pistän lopputuloksen jossain vaiheessa tänne näytille.
Pistän lopputuloksen jossain vaiheessa tänne näytille.
-
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 3:53 pm
- Location: Suomi, Finland
- Contact:
Re: Puuttuva pyöritys
Tätä opasta on suositeltu minulle joskus. Löytyi kätevästi kirjanmerkeistä. :) Englanniksihan se on, mutta kyllä Englantia kannattaa opetella, jos ohjelmoinnista tykkää.