schemef÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/lecture/13/.../ " «#¯ Ø t...

17
ٴߘ ⏓آਏ⏎⎇ん ߊӁ Щ௶٥ 0 ڄۄ௰ ћ SchemeΤѨ ٴߘpainterݩٴߘpainter⏓զ⎘⎧␓⏬␥␜⏓ଚ2 painterզ ѳ⎘⎧ҷ௨ آ7$ ⎘⎧ آ7 ǩ ⎔⎯⏵␥⏠␅⎰ జ␓⏬␥␜⎰ KWWSVJLWKXEFRPYLLYMDNOGGFJ ⎬⎃⏋⎿⎚ ⎠⏍⎖آ6LHUSLQVNL 7HWUDKHGURQ

Upload: others

Post on 02-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

Scheme

painter• painter

2

painter

Page 2: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

painter•

3

(define (painter:tetrahedron attribute origin size) (let ((s0 (/ 1.0 2.0)) (s1 (/ 1.0 (* 2.0 (sqrt 2.0))))) (let ((ps (list (list s0 0.0 s1) (list (- s0) 0.0 s1) (list 0.0 s0 (- s1)) (list 0.0 (- s0) (- s1)))) (ts (list (list 0 1 3) (list 0 2 1) (list 0 3 2) (list 1 2 3)))) (painter:polyhedron attribute (map (lambda (p) (add (scl size p) origin)) ps) ts)))) (define (sierpinski-tetrahedron attribute size max-count) (define (sierpinski-tetrahedron% origin size counter) (if (<= counter 0) (painter:tetrahedron attribute origin (* 1.3 size)) (let ((s0 (/ 1.0 4.0)) (s1 (/ 1.0 (* 4.0 (sqrt 2.0))))) (let ((o0 (add (scl size (list s0 0.0 s1)) origin)) (o1 (add (scl size (list (- s0) 0.0 s1)) origin)) (o2 (add (scl size (list 0.0 s0 (- s1))) origin)) (o3 (add (scl size (list 0.0 (- s0) (- s1))) origin)) (s/2 (/ size 2))) (painter:union (sierpinski-tetrahedron% o0 s/2 (1- counter)) (sierpinski-tetrahedron% o1 s/2 (1- counter)) (sierpinski-tetrahedron% o2 s/2 (1- counter)) (sierpinski-tetrahedron% o3 s/2 (1- counter))))))) (sierpinski-tetrahedron% (list 0.0 0.0 0.0) size max-count))

4

Page 3: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

painter

painter frame

painter

5

painter

frame painter

painter painter

painter

painter

transform-painter: +

6

Painter : transform-painter

frame painter

corner1

corner0

painter

Page 4: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

painter

painter

7

painter

frame

painter

painter

p

painter

painter

8

3d-painter

3d-frame

camera

light

Page 5: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

9

(painter:translate (list 5.0 0.0 0.0) (painter:cube attribute0 (list 10 10 10))

(painter:transfrom (painter:polyhedron attribute0 (list (list 0.0 0.0 0.0) (list 10.0 0.0 0.0) … ) ; (list (list 0 1 2) (list 0 2 3) … )) ; (make-3d-frame (list 5.0 0.0 0.0) (list 1.0 0.0 0.0) (list 0.0 1.0 0.0) (list 0.0 0.0 1.0))

painter

10

painter:polyhedronpainter:transformpainter:union

painter:polyhedronpainter:cube painter:spherepainter:cylinderpainter:revolution

painter:transformpainter:translatepainter:scalepainter:rotate

Page 6: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

11

(painter:polyhedron <attribute> <points> <triangles>)

attribute :

(make-attribute …)

points : (list (list x y z) …)

x, y, z: triangles :

points (list (list a b c) …)

a, b, c:

painter

12

painter(painter:transform <painter> <frame>)

painter : painter frame : frame

(make-3d-frame …)

painter:transformframe painter:transform

(show transform-001)

Page 7: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

13

(painter:union <painter> …)

painter : painter

painter

(show compounded-001) ; mod/trivial-shape.scm ( )

(show compounded-002)

14

(painter:cube <attribute> <size>)

attribute :size :

(list x y z) x, y, z:

(show cube-001)

(show cube-002)

Page 8: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

(painter:sphere <attribute> <radius> <resolution>)

attribute :radius :

resolution :

(show sphere-003) 15

(show sphere-002)

16

(painter:cylinder <attribute> <height> <top-radius> <bottom-radius>

<resolution>)

attribute :height :

top-radius :

bottom-radius :

resolution :

(show cylinder-001)

Page 9: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

x

17

(painter:revolution <attribute> <points> <resolution>)

attribute :points :xy

(list (list x y z) …) x, y, z:

resolution :

(show glass-001)

18

(painter:translate <vector> <painter>)

vector : (list x y z)

x, y, z: painter : painter

(show translate-001)

Page 10: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

19

(painter:scale <scale> <painter>)

scale : (list (list x y z) …)

x, y, z: painter : painter

(show scale-001)

20

(painter:rotate <degree> <axis> <painter>)

degree : (360°)

axis : (list x y z)

x, y, z: painter : painter

(show rotate-001)

Page 11: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

:mod/sierpinski-tetrahedron.scm 21

0

0

1

2

3

(../mod/*.scm )

22

~$ git clone https://github.com/vi-iv/jakld-3dcg

~$ cd ./jakld-3dcg/src

~$ jakld > (load “load.scm”)

> (show cube-001) > (show sphere-001) > (show sierpinski-tetrahedron-002)

Page 12: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

attributeattribute-001, -002

*camera*camera-001

lights-001

23

> (define my-painter (painter:union (painter:cube attribute-001 (list 1 20 1)) (painter:sphere attribute-001 10 3)))

24

> (show my-painter) > (redraw) ; painter

> (export “my-painter.scm”) ; S > (export “my-painter.scad” ‘scad) ; SCAD

import

Page 13: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

50x50x50 [mm]

[mm]

, ,

kfurukaw[at]kuis.kyoto-u.ac.jp

25

26

(define camera-001 (make-camera (list 0 0 10) ; (list 0 0 -1) ; (list 50 50 50)) ; (set! *camera* camera-001)

(define light-001 (make-parallel-light (list 1 1 1) ; (make-intensity 0.5 0.5 0.5))) ; (set! *lights* (cons light-001 *lights*))

Page 14: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

27

frame (cf. 2 )

frame

(define 3d-frame-001 (make-3d-frame (list 0.0 0.0 0.0) ; (list 2.0 0.0 0.0) ; x (list 0.0 2.0 0.0) ; y (list 0.0 0.0 2.0)) ; z

28

list

[mm]

z

x

y

(list )

Page 15: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

29

,

Phong

(define attribute-001 (make-attribute (hex->color #x000000) ; (hex->color #x4169e1) ; (hex->color #x4169e1) ; (hex->color #xffffff) ; (hex->color #x000000) ; 3))

30

3 2

(view-volume)

Page 16: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

31

••

••

3

••

32 3

••

Page 17: SchemeF÷ Ø t / #Ó #Î# 0winnie.kuis.kyoto-u.ac.jp/members/okuno/Lecture/13/.../ " «#¯ Ø t ± Ì#¯ Ï t 29 /²8 ö qaqnq qwpÔ/²8 pÔ,, o upÔ&ì ØpÐpÏpø ô 4Ä xq;qqq qmqdpÕphongpÔ

33

Structure and Interpretation of Computer Programs, http://mitpress.mit.edu/sicp/full-text/book/book.html Java Lisp :JAKLD, http://www.yuasa.kuis.kyoto-u.ac.jp/~yuasa/jakld/index-j.html Wolfram|Alpha Examples: Fractals, http://www.wolframalpha.com/examples/Fractals.html Rapid Prototyping Web Page, http://www.georgehart.com/rp/rp.html