【円弧-22】緯線・経線による球の表現

【円弧-20】【円弧-21】を足せば地球儀のような球が表現できます。

参考:数式によるパソコン・グラッフィクスのテクニック/著者:依田 谹(ヨダ コダマ)/昭和61年8月1日初版発行/発行所:一橋出版株式会社


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 720 720
%%HiResBoundingBox: 0 0 720 720
%%CropBox: 0 0 720 720
%%Title:緯線・経線による球の表現
%%Creator:Studio Fruit Jam / Toyokazu Nishi
%%Copyright:Studio Fruit Jam / Toyokazu Nishi
%%CreationDate:2014年11月30日日曜日11:35:39
%%ModificationDate:2018年10月4日 木曜日21:24:04

% 数式によるパソコン・グラッフィクスのテクニック
% 著者:依田 谹(ヨダ コダマ)
% 昭和61年8月1日初版発行
% 発行所:一橋出版株式会社

% ================ 座標変換 ================
360 360 translate
1 dup scale
% ================ 背景 =================
0 0 0 setrgbcolor
-360 360 720 -720 rectfill
% ================ 定義 ================
1 1 1 setrgbcolor
1 setlinewidth
/p 180 def % 円の角度
/n 20 def % 緯度(横)・経度(縦) の数
/k p n div def % th2の角度
/xa -45 def % 球のX軸角度 a:angle
/ya -45 def % 球のY軸角度
/za 0 def % 球のZ軸角度
/r 300 def % 球のサイズ

% ================ プロシージャ ================
% 図形の回転
/rotation {
% x軸角度
 /x1 x def
 /y1 y xa cos mul z xa sin mul sub def
 /z1 y xa sin mul z xa cos mul add def
% y軸角度
 /x2 x1 ya cos mul z1 ya sin mul add def
 /y2 y1 def
 /z2 x1 neg ya sin mul z1 ya cos mul add def
% Z軸角度
 /x3 x2 za cos mul y2 za sin mul sub def
 /y3 x2 za sin mul y2 za cos mul add def
 /z3 z2 def
} def
% 描画
/line {
 /px x3 def
 /py y3 neg def
 sw 1 eq { px py lineto }{ px py moveto } ifelse
 /sw 1 def
} def

% ================ メイン================
newpath % パスの初期化
0 0 r 0 360 arc % 輪郭線

% ================ 球の関数 % 緯度(横)
0 k p { % 緯線の角度
 /th2 exch def
 /sw 0 def % 余計な線を出さない
 0 1 2 p mul { % 緯線の円
  /th exch def
  /x r th sin mul th2 sin mul def
  /y r th2 cos mul def
  /z r th cos mul th2 sin mul def
  rotation % 図形の回転
  % 陰線処理 z3の負の値は回転角度によって変える
  z3 -10 lt { /sw 0 def } { line } ifelse
  } for
} for
% ================ 球の関数 % %経度(縦)
0 k p 1 sub { % %経線の角度
 /th2 exch def
 /sw 0 def % 余計な線を出さない
 0 1 2 p mul { % 緯線の円
  /th exch def
  /x r th sin mul th2 cos mul def
  /y r th cos mul def
  /z r th sin mul th2 sin mul def
  rotation % 図形の回転
  % 陰線処理 z3の負の値は回転角度によって変える
  z3 -10 lt { /sw 0 def } { line } ifelse
  } for
} for
stroke