← Back to team overview

sslug-teknik team mailing list archive

Re: LEGO spm

 

Atte André Jensen <atte@xxxxxxxxxxxxxx> writes:

> Hejsa
>
> Jeg har siddet og leget med ldraw filformatet direkte i emacs. Langt hen
> ad vejen giver det god mening, men jeg kan ikke finde ud af at dreje et
> element. I første omgang kunne jeg godt tænke mig vist hvordan følgende
> ville komme til at se ud i de tre versioner svarende til drejet om de
> tre akser:
>
> 1 14 0 0 0 1 0 0 0 1 0 0 0 1 3020.DAT

lidt forenklet:
Det første tal (1) fortæller noget om hvordan resten af linien skal tolkes
(1 betyder at vi skal inkludere en fil af samme format)
Andet tal (14) er en farve
De tre næste tal (0 0 0)  er en vektor der lægges til alle punkter
De ni næste (1 0 0 0 1 0 0 0 1) er en matrix der ganges på alle punkter
Til sidst står navnet på den fil der skal inkluderes.

Når vi har konstateret at vi skal inkludere en fil er det nok nemmest at
parse resten af linien bagfra.

3020.DAT er en fil der indeholder de tegneprimitiver der skal til at
lave en tegning af element 3020 (en 2x4-plade).

[1 0 0]
[0 1 0]
[0 0 1] er identitetsmatricen så tegningen bliver ikke transformeret på
nogen måde.

[0 0 0] betyder så at tegningen starter i origo.

Jeg kan ikke huske farvekoderne.

Når vi så vil rotere et element skal vi ændre på
transformationsmatricen.
En rotation med vinklen t om x-aksen fås med matricen:
[1      0       0]
[0 cos(t) -sin(t)]
[0 sin(t)  cos(t)]

En rotation med vinklen t om y-aksen fås med matricen:
[ cos(t) 0 sin(t)]
[      0 1      0]
[-sin(t) 0 cos(t)]

En rotation med vinklen t om z-aksen fås med matricen:
[cos(t) -sin(t) 0]
[sin(t)  cos(t) 0]
[     0       0 1]

De kan så ganges sammen hvis du vil rotere om flere akser på en gang.

Og ja, du kan sagtens angive transformationsmatricen:
[4 0 0]
[2 2 0]
[0 0 1]
det er bare ikke en transformation du kan udsætte en virkelig legoklods
for. 

.Henrik

-- 
>> Jo ja nej æh bøh!
>Helt enig.
Me too ... 
		-- vi lader personerne bag være anonyme


References