結晶学以外の立場、例えば、建築や芸術にもこの幾何学的に美しいパターンが取り入れられている。今後、もっと多様なタイリングの計算プログラムを作っていく予定である。
参考文献
(1)木村 薫、竹内 伸、固体物理20(1985)897.
(2)竹内 伸、木村 薫、固体物理23(1988)433.
(3)木村 薫、竹内 伸、固体物理23(1988)689.
(4)小特集; 日本金属学会会報25、2号(1986).
(5)特集; 日本金属学会会報29、10号(1990).
(6)A. Yamamoto and K. N. Ishihara, Acta Cryst. A44
(1988) 707.
Small Size
Middle Size
Large Size
EL=2.0# * A0 / sqr(5.0#) ' edge length
of the rhombus
for I=1 to 4
U(1,I)=EL*(cos(2.0# * PI * I / 5.0#)-1.0#)
' d|| (ux, uy)
U(2,I)=EL* sin(2.0# * PI * I / 5.0#)
V(1,I)=EL*(cos(4.0# * PI * I / 5.0#)-1.0#)
' d⊥ (vx, vy)
V(2,I)=EL* sin(4.0# * PI * I / 5.0#)
next I
H1= -1: H2= -1: H3= -1: H4= -1
' (-1-1-1-1) ⊥
VS = (H1*V(1,1) + H2*V(1,2) + H3*V(1,3) + H4*V(1,4))/5.0#
' V shift
'------------------------------------
' Graphics
'-----------------------------------
XMIN = 0.0: XMAX = 610.0
YMIN = -410.0: YMAX = 0.0
window (XMIN, YMIN)-(XMAX, YMAX)
view (15, 10)-(625, 420),9 , 3
WX1=205: WX2=605: WY1=5: WY2=405
WX3=5: WX4=186: WY3=5: WY4=405
line (WX1, -WY1)-(WX2, -WY2),,3,bf,11 ' ||
space
line (WX3, -WY3)-(WX4, -WY4),,3,bf,11 ' ⊥
space
line (10, -332)-(122, -402),,3,bf,0
' +++++
PERP ' perp lattice
' +++++
for I=1 to 4
MYU=I: DX=0.0#
' ++++++
OD DX ' ocupation domain
' ++++++
next I
end sub
'***************************************************
sub OD (DX as double)
'***************************************************
dim X(10), Y(10), P(10), Q(10)
select case MYU
case 1
H1(1)= 0: H2(1)=-1:
H3(1)=-1: H4(1)= 0
H1(2)=-1: H2(2)= 0:
H3(2)= 1: H4(2)= 0
H1(3)= 1: H2(3)= 0:
H3(3)=-1: H4(3)=-1
H1(4)=-1: H2(4)=-1:
H3(4)= 0: H4(4)= 1
H1(5)= 0: H2(5)= 1:
H3(5)= 0: H4(5)=-1
case 2
H1(1)= 0: H2(1)=-1:
H3(1)=-1: H4(1)= 0
H1(2)=-1: H2(2)= 0:
H3(2)= 0: H4(2)= 0
H1(3)= 0: H2(3)= 0:
H3(3)=-1: H4(3)=-1
H1(4)=-1: H2(4)=-1:
H3(4)= 0: H4(4)= 0
H1(5)= 0: H2(5)= 0:
H3(5)= 0: H4(5)=-1
case 3
H1(1)=-1: H2(1)= 0:
H3(1)= 0: H4(1)=-1
H1(2)= 0: H2(2)=-1:
H3(2)=-1: H4(2)=-1
H1(3)=-1: H2(3)=-1:
H3(3)= 0: H4(3)= 0
H1(4)= 0: H2(4)= 0:
H3(4)=-1: H4(4)=-1
H1(5)=-1: H2(5)=-1:
H3(5)=-1: H4(5)= 0
case 4
H1(1)=-1: H2(1)= 0:
H3(1)= 0: H4(1)=-1
H1(2)= 0: H2(2)=-1:
H3(2)=-2: H4(2)=-1
H1(3)=-2: H2(3)=-1:
H3(3)= 0: H4(3)= 0
H1(4)= 0: H2(4)= 0:
H3(4)=-1: H4(4)=-2
H1(5)=-1: H2(5)=-2:
H3(5)=-1: H4(5)= 0
end select
for I=1 to 5
X(I) = H1(I)*V(1,1) + H2(I)*V(1,2) +
H3(I)*V(1,3) + H4(I)*V(1,4) + DX
Y(I) = H1(I)*V(2,1) + H2(I)*V(2,2) +
H3(I)*V(2,3) + H4(I)*V(2,4)
next I
X1=(WX4-WX3)/(VS*2.5#*1.25)*(Y(1)+VS*1.25#*1.25)+WX3
Y1=(WY4-WY3)/(VS*5.0#*1.25)* X(1)+WY3
for I=2 to 5
XI =(WX4-WX3)/(VS*2.5#*1.25)*(Y(I)
+VS*1.25#*1.25)+WX3
XI1=(WX4-WX3)/(VS*2.5#*1.25)*(Y(I-1)+VS*1.25#*1.25)+WX3
YI =(WY4-WY3)/(VS*5.0#*1.25)*X(I)
+WY3
YI1=(WY4-WY3)/(VS*5.0#*1.25)*X(I-1)+WY3
P(I)=XI-XI1
Q(I)=YI-YI1
next I
point (X1,-Y1)
connect -step(P(2),-Q(2))-step(P(3),-Q(3))-step(P(4),-Q(4))-step(P(5),-Q(5)),
2*MYU,,f,2*MYU+1
end sub
'*************************************************
sub PERP ()
'*************************************************
dim X(20), Y(20), H1(20), H2(20), H3(20), H4(20)
H1(1)= 0: H2(1)= 0: H3(1)= 0: H4(1)=
0
H1(2)= 0: H2(2)=-1: H3(2)= 0:
H4(2)= 0
H1(3)= 0: H2(3)= -1: H3(3)= 0:
H4(3)=-1
H1(4)=-1: H2(4)=-1: H3(4)= 0:
H4(4)=-1
H1(5)=-1: H2(5)=-1: H3(5)=-1:
H4(5)=-1
H1(6)=-1: H2(6)= 0: H3(6)=-1:
H4(6)=-1
H1(7)=-1: H2(7)= 0: H3(7)=-1:
H4(7)= 0
H1(8)= 0: H2(8)= 0: H3(8)=-1:
H4(8)= 0
NP=8
for I=1 to NP
X(I) = H1(I) * V(1,1) + H2(I) * V(1,2)
+ H3(I) * V(1,3) + H4(I) * V(1,4)
Y(I) = H1(I) * V(2,1) + H2(I) * V(2,2)
+ H3(I) * V(2,3) + H4(I) * V(2,4)
next I
for I=1 to NP
J=(I mod NP) + 1
XI=(WX4-WX3)/(VS*2.5#*1.25)*(Y(I)+VS*1.25#*1.25)+WX3
XJ=(WX4-WX3)/(VS*2.5#*1.25)*(Y(J)+VS*1.25#*1.25)+WX3
YI=(WY4-WY3)/(VS*5.0#*1.25)*X(I)+WY3
YJ=(WY4-WY3)/(VS*5.0#*1.25)*X(J)+WY3
line (XI, -YI)-(XJ, -YJ),, 1
next I
'------------------------------------------------
H1(1)= 0: H2(1)= 0: H3(1)= -1: H4(1)=
0
H1(2)= 0: H2(2)=-1: H3(2)= 0:
H4(2)=-1
H1(3)=-1: H2(3)= 0: H3(3)=-1:
H4(3)=-1
H1(4)=-1: H2(4)=-1: H3(4)= 0:
H4(4)=-1
H1(5)=-1: H2(5)= 0: H3(5)=-1:
H4(5)= 0
H1(6)= 0: H2(6)=-1: H3(6)= 0:
H4(6)= 0
NP=6
for I=1 to NP
X(I) = H1(I) * V(1,1) + H2(I) * V(1,2)
+ H3(I) * V(1,3) + H4(I) * V(1,4)
Y(I) = H1(I) * V(2,1) + H2(I) * V(2,2)
+ H3(I) * V(2,3) + H4(I) * V(2,4)
next I
for I=1 to NP
J=(I mod NP) + 1
XI=(WX4-WX3)/(VS*2.5#*1.25)*(Y(I)+VS*1.25#*1.25)+WX3
XJ=(WX4-WX3)/(VS*2.5#*1.25)*(Y(J)+VS*1.25#*1.25)+WX3
YI=(WY4-WY3)/(VS*5.0#*1.25)*X(I)+WY3
YJ=(WY4-WY3)/(VS*5.0#*1.25)*X(J)+WY3
line (XI, -YI)-(XJ, -YJ),, 1
next I
'-------------------------------------------------
H1(1)= 0: H2(1)= 0: H3(1)= 0:
H4(1)= 0
H1(2)=-1: H2(2)= 0: H3(2)= 0:
H4(2)= 0
H1(3)=-1: H2(3)= 0: H3(3)= 0:
H4(3)=-1
H1(4)= 0: H2(4)= 0: H3(4)= 0:
H4(4)=-1
NP=4
for I=1 to NP
X(I) = H1(I) * V(1,1) + H2(I) * V(1,2)
+ H3(I) * V(1,3) + H4(I) * V(1,4)
Y(I) = H1(I) * V(2,1) + H2(I) * V(2,2)
+ H3(I) * V(2,3) + H4(I) * V(2,4)
next I
for I=1 to NP
J=(I mod NP) + 1
XI=(WX4-WX3)/(VS*2.5#*1.25)*(Y(I)+VS*1.25#*1.25)+WX3
XJ=(WX4-WX3)/(VS*2.5#*1.25)*(Y(J)+VS*1.25#*1.25)+WX3
YI=(WY4-WY3)/(VS*5.0#*1.25)*X(I)+WY3
YJ=(WY4-WY3)/(VS*5.0#*1.25)*X(J)+WY3
line (XI, -YI)-(XJ, -YJ),, 1
next I
'-------------------------------------------------
H1(1)=-1: H2(1)=-1: H3(1)=-1:
H4(1)=-1
H1(2)=-1: H2(2)=-1: H3(2)=-1:
H4(2)= 0
H1(3)= 0: H2(3)=-1: H3(3)=-1:
H4(3)= 0
H1(4)= 0: H2(4)=-1: H3(4)=-1:
H4(4)=-1
NP=4
for I=1 to NP
X(I) = H1(I) * V(1,1) + H2(I) * V(1,2)
+ H3(I) * V(1,3) + H4(I) * V(1,4)
Y(I) = H1(I) * V(2,1) + H2(I) * V(2,2)
+ H3(I) * V(2,3) + H4(I) * V(2,4)
next I
for I=1 to NP
J=(I mod NP) + 1
XI=(WX4-WX3)/(VS*2.5#*1.25)*(Y(I)+VS*1.25#*1.25)+WX3
XJ=(WX4-WX3)/(VS*2.5#*1.25)*(Y(J)+VS*1.25#*1.25)+WX3
YI=(WY4-WY3)/(VS*5.0#*1.25)*X(I)+WY3
YJ=(WY4-WY3)/(VS*5.0#*1.25)*X(J)+WY3
line (XI, -YI)-(XJ, -YJ),, 1
next I
end sub
'*******************************************************
sub EXTERNAL ()
'*******************************************************
var DX as double, R as double, X0 as double, D0
as double
var DIX as double, DIY as double, DI as double,
THE0 as double, THE as double
var DEX as double, DEY as double
var H1 as integer, H2 as integer, H3 as integer,
H4 as integer
DX=-VS*MYU
select case MYU
case 1
R=VS/TAU/TAU: PM= 1.0#
case 2
R=VS/TAU:
PM=-1.0#
case 3
R=VS/TAU:
PM= 1.0#
case 4
R=VS/TAU/TAU: PM=-1.0#
end select
X0=R*cos(PI/5.0#)
for H1 = -HR to HR
for H2 = -HR to HR
for H3 = -HR to HR
for H4 = -HR
to HR
DIX = H1*V(1,1) + H2*V(1,2) + H3*V(1,3) + H4*V(1,4) + DX
DIY = H1*V(2,1) + H2*V(2,2) + H3*V(2,3) + H4*V(2,4)
DI=sqr(DIX*DIX + DIY*DIY)
' +++++++++++++++++++++++++
THE0=ATAN2(DIY, PM*DIX)
' +++++++++++++++++++++++++
THE=abs(THE0)-72.0#*int(abs(THE0)/72.0#)
D0=DI*cos((THE-36.0#)*PI/180.0#)
if D0<=X0 then
DEX = (H1*U(1,1) + H2*U(1,2) + H3*U(1,3) + H4*U(1,4) + DX)/TAU/TAU
DEY = (H1*U(2,1) + H2*U(2,2) + H3*U(2,3) + H4*U(2,4)
)/TAU/TAU
print #1, MYU, DEX, DEY, DIX, DIY
if EL<=DEX and DEX<=RG+EL and -RG/2.0<=DEY and DEY<=RG/2.0
then
XX=(WX2-WX1)/RG*(DEX-EL)+WX1
YY=(WY2-WY1)/RG*(DEY+RG/2.0)+WY1
circle (XX, -YY),100.0/RG, 1+2*MYU,,,,f
end if
XX=(WX4-WX3)/(VS*2.5#*1.25)*(DIY+VS*1.25#*1.25)+WX3
YY=(WY4-WY3)/(VS*5.0#*1.25)*(DIX-DX)+WY3
circle (XX, -YY),0.5, 2*MYU,,,,f
end if
next H4
next H3
next H2
next H1
end sub
'****************************************************
sub LATTICE (FI$)
'****************************************************
dim X(5000) as double, Y(5000) as double
dim PX(100) as double, PY(100) as double
dim CN(5000) as integer
var R as double
XMIN = EL: XMAX = RG+EL
YMIN = -RG/2.0: YMAX = RG/2.0
window (XMIN, YMIN)-(XMAX, YMAX)
view (220.0, 16.0)-(619.0, 414.0),11 , 3
I=0
open FI$ for input as #1
input #1, EL
while not eof(1)
input #1, CN(I), X0,Y0, DIX,
DIY
if XMIN=<X0 and X0<=XMAX
and YMIN<=Y0 and Y0<=YMAX then
I=I+1
X(I)=X0
Y(I)=Y0
' print I, X(I), Y(I)
end if
wend
close #1
NP=I
print "total lattice points =";NP
'------------------------------------
for I=1 to NP
K=0
X0=X(I)
Y0=Y(I)
for J=1 to NP
R=sqr((X0-X(J))^2+(Y0-Y(J))^2)
if EL*0.9<R
and R <=
EL*1.1 then
K = K + 1
PX(K) = X(J)
PY(K) = Y(J)
line (X0,-Y0)-(X(J),-Y(J)),,14
end if
next J
for m=1 to k
X1=PX(M)
Y1=PY(M)
for L=2 to K
X2=PX(L)
Y2=PY(L)
A1=sqr( (X1
- X0)^2 + (Y1 - Y0)^2 )
A2=sqr( (X2
- X0)^2 + (Y2 - Y0)^2 )
NAISEKI=(X1-X0)*(X2-X0)
+ (Y1-Y0)*(Y2-Y0)
if int(1000.0*A1)=int(1000.0*A2)
and int(1000.0*NAISEKI)=int(1000.0*A1*A2*cos(36.0#*PI/180.0#)) then
connect (X0,Y0)-step(X1-X0,Y1-Y0)-step(X2-X0,Y2-Y0)-step(X0-X1,Y0-Y1),14,pset,f,13
end if
next L
next M
next I
'---------------------------------------------------
for I=1 to NP
circle (X(I), -Y(I)),rg/80.0, 1+2*CN(I),,,,f
next I
end sub
'*****************************************
function ATAN2 (Y as double, X as double)
'*****************************************
if Y > 0.0# and X = 0.0# then
ATAN2 = 90.0#
else if Y > 0.0# and X < 0.0# then
ATAN2 = atn(Y / X) * 180.0# / PI + 180.0#
else if Y < 0.0# and X > 0.0# then
ATAN2 = atn(Y / X) * 180.0# / PI + 360.0#
else if Y < 0.0# and X < 0.0# then
ATAN2 = atn(Y / X) * 180.0# / PI + 180.0#
else if Y < 0.0# and X = 0.0# then
ATAN2 = 270.0#
else if Y = 0.0# and X < 0.0# then
ATAN2 = 180.0#
else if Y = 0.0# and X = 0.0# then
ATAN2 = 0.0#
else
ATAN2 = atn(Y / X) * 180.0# / PI
end if
end function
Back
to Department of Materials Science and Engineering
Last Modified: April 1, 2009