群衆波動シミュレータの構築 修士論文別冊

Page 1

群集波動 シミュ レー タ Pedestrian¨ Wave

1996年 度

Simulator

修士論文別冊

渡辺仁史研究室

樋 口智幸


群 集波 動 シ ミュ レー タ

■概要 本 プ ロ グ ラ ムは以下 のパ ッケ ー ジか ら成 る。

O modelS:駅 構 内 モ デ ルの作成 ・ 描 画 ・管理。

O gm:シ

ミュ レー シ ョンを実行 す る。

OwaVdet:ウ ェー ヴ レッ トを用 い た時 間周波 ―

を行 う。

クラス構成 上重 要 な部分 を以下 に説明す る。

■全体 の構成

SelfFrarne アプリケ ー シ ョン動作 メニュー、描百領域

ModelManager オブジェク トの作成・管理

sirnu

ator

シミュ レーションを実行

ModelManagerか らの 情報 に 基 づ い て、Simulatorは 群集 の 移動経路 とな る Routesク ラ

Bout

S

スを 自動的 にイ ンス タ ンス化 す る。

移動経 路

Model 〔 Ob iect〕 駅歩行空間の一部分

Routesイ ンス タ ンス は、経路 とな る一 連 の Moddを 保持す る。

シ ミュ レー シ ヨンに必 要 な情 報 は、Simulatorか らRoutesを 経 由 して各 Moddに 与 え られ る。

RoOm 群集密度信号 を 有す る場

PlotFrame 結果表示

早稲 田大学渡辺仁史研 究室

1996年 度修 士論文


群集波動 シミュレー タ

■オブジェク ト(Modeリ クラスの継承関係 *論 文 ではオブジェク トと表記 して いる が、Javr小 _lm8・ ObieCtと クラス名が衝 突するために、 プログラム中では M劇 olと している。

群集書産信号を変化させ るディツタル・ フィルタ

継 密度信号を 有する場

群集 を発生 させ る

■ Sequenceク ラス ウェー ヴ レッ トによる時間周波数解析 を行 うためのデー タ系列。 KindeX,(data本 体))の 形 を持 つ 2次 元 の Vectorで ある。

ウェー ヴレッ トによ る分解・再構成のた めの系列

早稲 田大学渡辺仁史研究室 1996年 度修 士論文


群集波動 シミュレー タ

■ シミュ レーシ ョン実行の流れ

シ ミュレー シ ョン実行時 間

Simulator上 でシミュ レー ション時間の設定 を行 う。シミュ レーシ ョンを開始 した時点 で、Simulator

は 自分 が持 つ各 Routesに 対 して実行時 間を送 る。これ を受けて、Routesは それぞれの発 生オブジ ェ ク ト(Genmtor=Phtfom,Ouヽ

ide)に 対

して実行時間 を指定 し、Generatorは 自分 が持 つ発生情報(運 行 ダ

イヤグラ ム・発 生人め に基 づいて群集密度信号(Sequence)を 生成す る。生成 された Sequenceは 経路 の流 れに従 い 、Filterに よって成分 の変化 を受けなが ら伝搬 されてい く。Roomに おいてそ こを伝搬 し た Sequen∝ の総和 が 、その場 におけ る群 集密度信号 となる。

以下 に、 ソースコー ド中 よ り主要 な部分 を抜粋 す る。

早稲田大学渡辺仁史研 究室 1996年 度修 士 論文


群集波動 シミュ レータ 件 ′ 十

MOdeManagerjava verO.9 96/1/7

十 ■

*

by

樋口

智幸

:HIGUCⅢ TOMOYUKI

中 中

'

+

早稲田大学大学院理工学研究科建設工学専攻 Architcmal Engineering Course of Graduate School,

WASEDA IJNMRS】

Y

十 Endl:higowatanabe.arch.waseda.ac.Jp 十 uRL:htり JmW.Watanabe.achwaseda,acjpnig/ 摯

+Please 31Ve me any advices,ideas,inforrnations and cheers. *

十くくHISTORYゝ > ■ 96.4.18 Rotates models when SⅢ Fr‐ KEY is down. ホ 96.4.22 class Aisle andObi∝ t are divided. 中 96.4.29 Class Aisle andObieCt are packaged as a dass"Moder. 中 claSS heModelisrenamed to"ModeManager". ● 96.6.29 has mainc)me■Od and made stand― alone.

*

96.8.08

中 ■

96.12.28 Layers applied. 97.14 "Open"and"Save"applied.

+

0ff‐ screenctwice血3Size

of tt window)and‖ hand tool"(to mOVe tte screenp applied.

97.1.7 "Scroubars:l are added.

中ノ

package models; impOniava.aWl.十

;

mportJava.awt.unage.FilteredLnageSource; mportJava.u● 1.Vector; importjava.u■ 1.StringTolcdzer;

mpo■ java.udl.NoSuchElernentExc"tio■ importjava.udl.Enumerado■

mportsim.ErrorMessage; public class ModelManager extends Panel{

bool― toMakeModel=false; int px,py;

//mouseDown pomt

int嵌 ,iy; /Oft‐ Top of dle visible screcn int破 01t iyOld; int scrX,scrY;r/」 le center point of the screen

pnvate Vector modelmay=new vector(光 Rectangle paintAre鶴

〃a recnttle area to r"amt 〃off_screen

hage ors;

private int aciveLayer=1;

//dle number of acive layer

Craphics grt

ObiPalette op;

public Serrame lm;

//Obi∝

tS palette(t001S)

//parent ialne

boolean hasSelected; private int scale=2;

boolean scrRescale=me; WoBarib;

〃 ス ケ ー ル チ ェ ン ジ・ フ ラ グ(画 面書 換 用 )

private int layerMode=2; Rectangle a■ Area;

static hal String modelSorts□ ={"Aisle","Stairs","Square","Gate","Platfom","Outside"〕

;

早稲田大学渡辺仁史研究室 1996年 度修 士論 文


群集波動 シミュ レー タ 〃,十 ■cOnSmctorsホ 十十

ModeWanag《 ObiPdette

Op){

setFon〈 neW Fontc“ Dialog",Font.PLAIN,10));

resiz1560‐ 16,388-48);

BackgrolmdColoF.White洸 〃画 面 の 背景色 を自に “ scrX=sizeo.Widdl■ 10;scrY=sizeo.henght,10; 破 =‐ sizeo.widalノ 2;iy=― sizく ).height/2; 破01d=嵌 ;lyOld=ly;

〕 ■●Medlods中 十 ■十 ウ 中 * hitialize十 〃 //1中 *十

public void mく )(

Componentco=■ is;

WЫ く!((∞ =∞ .getParen〈 ))instanceOf SerFa“ ))( }

h=(SelfFrame)∞

;

Menu menu=new Menu(“ File, menu.addcneW Menultem("C,デ 1)); menu.addcneW Menultemc"Save")); menu.addcneW MenulteFn("‐ "漱

menu.addcneW Menultan(“ Qur)〉

MenuBar mbar=new McnuB嶽 ゝ mbar.addcmenu);

menu=new Menu("Edit");

menu.addcneW Menultaく ‖ Clear")); menu.addcneW Menultm(・ Clear Au"》 menu.addrnew Menumm("F')、 menu.addCneW Menultm("PrefeFenCeS.¨ "》 mbar.addcmenu);

menu=new Menu("Simulation''); menu.addcneW MenulteFn("Do")ヽ mbar.addcmenu);

im.setMenuBarcmbar); screenit(); )

void screeniく ){ scrX=size().Widdl■ 10;scrY=sizeo.height Ⅲ10; 破 =― d黎〈 2;iy=‐ siza).height/2; ).widぬ ノ 破Old=ix;iyOld=ly; 。rs=createLnagく siZく ).Widul・ 2,sizく ).height Ⅲ2洸 grf=offs.getCraphics(ゝ grf.setColo<Co10r.white); girlIR∝ t(0,0,SiZa).wid■・ 2,sizec).height*2ゝ allArea=new Rectangle(0,0,Size()。 Widdl+20,size()height■ 20); )

早稲田大学渡 辺仁史研究室 1996年 度修 士論 文


群集波動 シミュ レー タ

//*** KEY operatiols *r.* int d((int x) {

retum (x - ix - size0.width) * scale + scrx;

l int aY(int y) {

renrn (y - iy - size0.height) * scale + scrY; )

public boolean mouseMove@vent e, int x, int y) { for (int i = 0; i < modelArray.size0; i+t) (

if (getModel(i).selected) return true; )

ib.setl.ocation(aX(x), aY(y), true); return true:

l public boolean mouseDown(Event e, int x, int y) {

Px=x;PY=Y; if

(op.n:

op.HAND) ren[n true;

toMakeModel

=

tro€l

hasSelected = false;

for (int i = modelArray.sizeQ - 1; i >= 0; i--) [ geModel(i).clicked(e, d((x), aY(y)); if (getModel(i).inside(aX(x), aY(y))) toMakeModel = false; I

repaint0; return true;

l public boolean mouseDrag(Event e,int x, int y) {

if (op.n:op.HAND)

{

moveScreen(x, y); return true; )

if (toMakeModel) { if (makeNewModel(e, x, y)) renrn true; )

for (int i = 0; i < modelArray.size0; i++1 1 getModel(i).dragged(d((x), aY(y)h )

repainO; return true; )

public boolean mouseUp@vent e, int x, int y) { for (int i = 0; i < modelArray.size0; i+t) { getModel(i).mouseUp( ); )

ixOld=ix; iyold= iy; rcnlrn true; )

public boolean keyDown(Event e, int key) { if (keY == 3; 1 deleteMode(); retum true; )

〃"delete"key is pressed.

if(keY:1Q;1 openPlot0; renrrn true;

l

ll"enter" key is uessed.

早稲田大学渡辺仁史研究室 1996年 度修士論文


群 集波 動 シ ミュ レー タ

1fi)7D

if ((key >=100+) && (key <=

{

boolean boo = tnre; for (int i = 0; i < modelAnay.size0; i++){

if (geMode(i).nudge(e, key))

{

repain(); boo = false;

break;

l )

if (boo) [

(key: 1m4 && activelayer != 2) { setActiveLayer(+ractivelayer); I else if (key == l(X)5 && activelayer != 0) { setActivelaye( - activelayer) ; if

)

)

refirn true;

if

l

(keY ==

{J;

//Arrow keys 1

if (+rscale > 20) scale = 2O; setScale(scale);

return true;

| if(keY:{l)

il'-" (

if (-scale <2)scale=2; setScale(scale);

return true;

I

ll"+"

return false; )

void chengelnfoQ {

ib.scale.setTex("scale: l/"+(scale * 100)); if (scale 2 ii scale 5 ii scale == 10 ll scale == 20) { ib.ch.select("1/"+(scale * 100)); ) else { ib.ch.select("Others... ");

:

:

l )

voidchangeScreen0 { boolean boo = false;

Modelm =null; for (int i = 0; i < modelArray.size0; i++)

if (geModel(i).selected)

{

(

boo = true: = getModel(i);

6 )

l

if (op.n==op.HAND ii!boo)

{

setScrXY(scrX-(ix+siz{).widthl2)

*scale,scrY-(iy+sizeOJreight/2)*

scale);

) else { setSctXY(m.centerX0, m.centerYQ);

l l

早稲 田大学渡 辺仁 史研 究室 1996年 度修士論文


群集波動 シミュ レー タ

//**r MoDEL hardling r.**

booleanmalceNewModel(Evente, int x, inty) { int nx = Mathrnin(x, px); int ny = Mathrnin(y, py); int n_width = Math.abs(x - px); int n_height = Math.abs(y - py); if (n_width < 9 ii n_height < 9) reurn false; int sort = opJr;

if (sort == I && activelayer: 0) retum faise;

Model model = newModel(sort" d((nx), aY(ny), n_width * scale, n_height * scale); model.checkSizeO;

if (lmodel.checkJoircd0)

{

model.clicked(e, d((x), aY(y));

addMode(model);

repain(); toMakeModel = false: )

return true;

l boolean makNewModel(String s) { SaingTokenizer st = new SringTokenizer(s, if (st.cormtTokens0 != 9) return false;

" : ") ;

String temP = st.nextTokeng; int sort = 0; for (int i = 0; i < 6; i++) {

if (temp.equals(modelSorts[i] )) sort = i; I

String anributes = st.nextTokenO; String nane = st.nextTokeno; nane = name.equals("anonymous") ! r" : name; int layerNum = Integer.parselnt(strextToken0);

intx=Integer.parseln(slnextToken0);inty=lnjst.t.parselnt(stnextToken0); int w = Integer.parselnt(st.nextToken0); int h = Integer.parselnt(st.nextToken0); int r = Integer.paselnt(slnextToken0); Model model = newModel(sort, x, y, w, h); model.setlayerNurn(layerNum); model.rotate = r; model.name = name;

model.setAcrihrtes(anributes); addModel(model); r€turn true;

l Model newModel(int sort, int x, int y, int width, int height) {

swirch(sort) { case 0:

case

l:

return new Aisle(this, x, y, width, height);

return new Stairs(this, x, y, width, height); case2z return new Square(this, x, y, width, height); case 3:

return new Gate(ttris, x, y, width, height); case

4: renun new Pladorm(this, x, y, width, height);

defaulu return new Outside(this, x, y,

widtll height);

)

l

早稲 田大学渡辺仁史研究室

1996年 度修 士論文


群集波動 シミュレー タ

10

public Model geMode(int i) { Model ouput = null;

trv{

oulput = (Model)modetArray.elementAt(i) ; ) catch (ArraylndexOutOfBormdsException e) { ErorMessage em = new ErrorMessage("The modelArray has no element at: " + i); )

return output;

l void addModel(Model m) {

inti=0;

int complayer = m.getlayerNumO; if (m instanceof Ro<rm) complayer--; for (Enumeration e = modelAray.elernents0; e.hasMoreElemens0) { Model mtemp = (Model)e.nextElement0;

if (mtemp.getlayerNurn0 > complayer) break;

i+r;

l

modelAray.insertElementA(rn, i); )

public Vector geModelArrayQ { return modelAray; )

voiddeleteModel0 { for (int i = 0; i < modelAray.size0; i+r)

if (geModel(i).selected)

{

{

removelvtodel(i--); )

I repaint0; )

void removeModel(int i) { getModel(i).addArea0 ;

getModel(i).clearlmage(grf, activelayed; modelArray.removeElementAt(i)

;

)

void rernoveAlModels0 { modelArray.removeAllElemens0

;

changeScreen0;

l voidopenPlo() {

for (int i = 0; i

< modelAray.size0; i+r)

if (getModel(i).selected)

{

{

geModel(i).showPlo(); )

l )

早稲田大学渡辺仁史研究室 1996年 度修士論文


群集波動 シミュ レー タ SCREEN methods *** void moveScreen(int x, int y) { (px - x); iy -= (py - y); ix

//***

-

Px=x;PY=Y; frrn.setBarsValuesO;

if ((ix < -size0.width)

il (iy < -size{).height) ii

(ix > 0) ii (iy > 0)) {

changescre€n0;

renlrn; )

repaint(new Rectangle(O, 0, sizeO.width, size0leight)); )

int getActivelaye() { return activelayer; )

public void setActivelaye(int a) { activelayer = a; for (int i = 0; i < modelAray.size0;

i+r)

{

getModel(i).selected = false; )

setActivelayer(a) clearSqeen0; ib.

;

)

int getlayerMode0 {

reftrn layerMode; )

void setlayerMode(int a) {

if(a<0ii a>2)rcturn;

layerMode = a; clearScreenQ; )

voidclearScreen0 ( scrRescale = true; grf .setColo(Color.white);

grf.fitlRec(0,0, sizeO.width *

2, sizeO.height

* 2);

rcpaintAll0; )

int getScde0 { return scale;

I void setScale(int scale) { this.scale = scale; frm.setScrollbarso; changeScreenO;

chengelnfo0;

l int getScrX0 [ returr scrX - (ix + size0.width/ 2) * scale;

l intgetScrYQ { reftrn scrY - (iy + sizeQieightl2) * scale; I

早稲 田大学渡 辺仁史研究室 1996年 度修士論文


群集波動 シミュ レー タ

12

void setScrXY(int x, int y) { scrx = x; scrY = yi ix = -size0.width I 2; iy = -sizeo.heuht / 2; if (scale: 20) { scrX = sizeO.wid0r * 10; rcrY = sizeOJreight

*

10;

l

clearScreen0;

l //*** PAINTING

Metlrods

***

public void update{Graphics g) {

pain(g);

l publicvoidre,painQ

(

if

(paintArea == null) return; repaint(convRect(paintArea))

;

)

public void repain(Rectangle rect) { repaint(rect.x, rect.y, rect.width, rect.height); )

public void repaintAlO { paintArea = allArea; super.repint(0, 0, size0.width, sizeO.height); )

public void paint(Graphics g) [ if (paintArea == null) paintArea = allArea;

if (!(op.n: op.HAND &&

lscrRescale)) {

for (int i = 0; i < modelArray.size0;

i+r)

{

of fScreenPaint@eModel(i), false) ; )

for (int i = 0; i < modelAray.size0; i+t) { offScreenPaintGeModel(i), true); )

if (offs

l

!= null) { g.drawlmage(offs, ix, iy, this);

] scrRescale = false;

paintArea = null;

l public void offScreenPain(Model m, boolean state) { if (m !=null) { if (state) m.drawlm ary:e(gf , activelayer); else m.clearlmage(grf, activel,ayer); )

l Rectangle addAredRectangle rect) ( paintArea = (paintArea == null) ? rect : paintArea.union(rect);

retunpaintArea; )

boolean arealntersects(Rectangle rect) { if (paintArea: null) retum false; return reclintersects(paintArea);

l

早稲 田大学渡 辺仁史研 究室 1996年 度修 士論文


群集波動 シミュ レー タ

13

Rectangle convRec(Rectangle rect) { int x = floor(recrx - scrX) + sizeO.width + ix; int y = floor(recry - scrY) + size0jreight + iy; ht width = ceil(recrwidth); int height = ceil(rectieight); return new Rectangle(x, y, width, height);

l intfloo(inta)

{

return (in0Math.floor((double)a / scale);

I int ceil(int a) { return (int)Math.ceil((double)a / scale);

l voidresizeScreenO {

offs.flush0; screenlnitO;

repaintAlO;

l

l

早稲 田大学渡辺仁史研究室

1996年 度修士論文


群集波動 シミュレー タ

14

″ ● ● 中

dass Model

9614/29

+ 十

by

t

樋 口

智幸

:HIGUCⅢ TOMOYUKI

r'<<HISTORY>>

* r' 'r * * * *

96.6.29The class "Aisle","Stairs" and "Square" are added. 95.6.30The pa.rent class "Model Manager' has the integrared off-screen image, which each class has had. 96.8.28Now the class "Gate" has been added.

96.12.30 95.12.31

Class "Pladorm" ant "Outside" are added.

Join Methods are added.

*l pack4ge models;

import java.awt.*; irnport j ava.util.Vetor; import j ava.util.Enumeration; import wavelet.Sequence; class "Modeln *** public absract class Model extends Object { ModeManagermm;

//***

int px,py;

int oldPx,oldPy; int clickX,dickY; int widdl,height; int oldWndal,。

ldHeuヒ

〃オブジ エ ク トの始点 の xy座 標 〃旧座標 〃マ ウス ダウ ンの座標 〃大 きさ

〃旧大 きさ

mt sx,sy;

int oldSx,oldSy;

〃ス ケ ー ル後 の始 点 の xy座 標

htsWiddl,sHeight;

int oldSWid血 ,oldSHeight; 〃ス ケ ー ル後 の大 きさ Color back=new Color(240,214,193洸 〃オブジ エク トの 背景色 int comer=0;〃 サ イズ 変 更 カー ソル の位 置 int rotate=Q〃 回転 の状 態 (1:270度 2180度 3:90度 ) boolean sel∝ ted=falsc;

Lnage offs; 〃 オ フス ク リー ン イメ ー ジ Graphics grt 〃 オ フス ク リー ン グ ラ フイクス int MINWIDTH,MINHEIGHT; int MA― DTH,MAXHEIGHT; private int layerNum; static int ID;

int id; public String ram€

〃所属す る レイヤ ーの番号

='"'

Sequerre densitySignal; int range = Integer.MAX_VALUE;;

//***

Q6nsgustors

〃群集密度信号

***

public Model(ModeManager rnm, int px, int py, int width, int height, Rectangle minmax) {

supe(); MINWIDTH = minrnax.x; MINHEIGHT = minmo(.yi MAXWIDTH = minmax.width; MAXHEIGHT = minmaxlreight; this.mm = mm; this.px - px; this.py = py; rhis.width = width; this.height = heighr; oldPx = pxi oldfu = py; oldWidrh = width; oldHeight = height; layerNurn = mm.getActivelayer0; id = ID+r;

l

早稲 田大学渡辺仁史研 究室 1996年 度修 士論文


群集波動 シミュレー タ

15

Metlrods *** Recturgle getRecO ( return new Rectangle(px, py, width, height);

//***

)

Rectangle getRect(Model m) {

(0,0,0,0);

if (!(samelayerNum(m.getl,ayerNum0)

ii m.saneLayerNum(this.getlayerNum0)))

return new Rectangle

return getRect0;

l Rectangle getOldRec$ { renrm new Rectangle(oldPx, oldPy, oldWidttU oldHeight); )

void setlayerNum(int a) { layerNum= a;

l public int getl"ayerNum0 { return layerNum; )

boolean samelayerNum(int a) { retum getlaYerNum0 == 3;

l intpn(int a) [

return (in0(((float)a - 0.5) * 2);

l synchronized int centerX0 { return px +widdr/ 2; )

synchronized int centerY0 { rcturn py + height/ 2;

I public int getWidth0 { retum width * 1000 / 28;

l public int getHeighO { return height

*

1000 / 28;

l public int getRotate0 { return rotate;

I public int getlD0 rehtrlr id;

{

)

public void setAnributes(String s) { )

public String toStringQ { Suing temP = namei

if (name.equals("")) temp = "anonJrmous"; return ":" + temp + ":" + layerNum + ":" + px + 'r:" + py + ":" + width +

':"

+ height

+ ":" +rotate;

)

早稲 田大学渡辺仁史研究室 1996年 度修 士論文


群集波動 シミュ レー タ

16

public inttouchcMOdel m){

r(m.centerX()>pX&&m.centerX()く PX+Widtt rettm widぬ

;

reun heittt

〕 public int open(){

remm CrOtate%2==o?heightノ 28:widulノ

28;

〕 public int lengalc){

re― CFOtate%2==0)?Wid血 /28:heightノ

28;

〕 ● ・・ sinuladons■ ●

rr・

absttact public Sequence setDensity(Sequence seq,Model mゝ

public Sequence getDensityo{ remm densitySignal;

〕 p●blic

void ctarDensity(int range){

densitySignal=nun; ■us.range=range;

〕 /rt*,MousE operttbns十 中十 vond cttcke《

Event e,mtx,mty)〔

clickX=x;面 よY=y;

oldPx=px;oldPy=py;

〃ク リックダウン座標記録

oldWiddl=widぬ ;oldHelght=helght; boolean shift=e.面 ftDown(光

if(layerNum!=nlm.getActiveLayeく ))re―

;

r(e.。 。 ntroDown()&&inSidaX,y)&&!nlm.hasSelected){ rotation();

nlm.hasSelected=me; rem;

〕 if(Shiftl〔

r(inside(x,y))〔

sd∝ ted=!sdected; addArea();

re― rem;

;

)

}

if(Selected)〔

r((inside(X,y)&&mmllasSelected)‖ (!inSide(x,y))){ sekttted=false; addAreac);

re―

;

Sd∝ 〈 X,y); mm.魅 Sd∝ ted=truc; re● ■ 口n;

〕 〃selected

早稲田大学渡辺仁史研究室 1996年 度修士論文


群集 波動 シ ミュ レー タ

17

if(inSideX,y)&&OmmllaSSelectedm)〔 selec〈 x,y); ();

ntm.hasSelected=me; …

re―

;

}

〕 vond sd∝ 〈int X,int y){ int scale=ntrn.getScale();

boolean left=(xく PX+4+scale);

boolean right=(x>PX+Wid■ ‐4■ boolcan top=oく py+4'scale):

scale);

boolcan bottom=(y>py+height-4 t scale); corner=0;

if(left&&top) corner=1; r(Hま t&&top) corner=2; if(lei&&bOttom) COrner=3; if Cright&&bottom)corner=4; sd∝ted=me;

〃 どの カ ー ソ ル を掴 ん で い る か

}

void rotation(){

px=centerXo― height/2;py=centerYo― widぬ /2; widal=OldHeight height=oldWidぬ

;

mt oldRotate=rotate; ‐ rotate■「 ;

rotate=rotate%4; selected=me; if(CheckJOined())rOtate=oldRotate;

addArea) )

void draggedcint X,int y)〔

if(!Selected)remm; int dx=x‐ clckX;mtdy=y‐ cuckY; switch(corner){ case O:

px‐ dx;py+=dy; breヘ

〃移 動 モー ド

case l:

widal=。 ldwidぬ ―dx;height=oldHeight‐ dy;

Px=oldPx+dx;py=oldPy+dy;

bret case 2:

widdl=oldWiddl+dx;height=oldHeight‐ dy;

py=oldPy+dy: break; case 3:

widdl=oldWidぬ ‐dx;height=oldHelght+dy;

Px=oldPx+dx; bre七 case 4:

widal=01dwidm+dx;height=oldHeight tt dy;

〕 checkSi“ 仇 int scale=nlm.getScale(〉 nf(wk■ hく 9+scakう Wid血

=9*scale;

r(heiま tく 9・ SCale)height=9 t scaL

〃サイズ変更 モー ド

if(!CheckJoined()){

a…

();

早稲田大学渡辺仁史研 究室 1996年 度修 士論文


群集波動 シミュレー タ

18

cuckx=x;clickY=y; 〕 vott checkSizeo〔

int minW=((rOtate%2)==0)?MINWIDTH:MINIIEIGH■ int minH=鮨 otate%勾

-0)?MINHEIGHr:MINWIDTH;

int maxW=((rOtate%2)=o?M船 圏 DTH:MAXHEIGHT; int maxH=((rOtate%2)==0)?MAXHEIG田『 :MAXWIDTH; if(Widalく r Kheightく

minw)wid■ =ninЧ 亀 minH)height=ninH;

ilf(Widm>maxwn wid■

=maxW;

r(hei♪ t>maXH)heittt=maxH;

〃大 きさ制限

〕 public V∝ tor containedModeお ooolean aag){ Vector result=new Vecto<ゝ

mm.getMode― y()。 SiZa);‖ 十){

fOr(int i=o;iく

Model m=nun.geModel(i); if(m!=thiS&&(aag==isSatneSor〈 m)))(

r(血 s.getRectい ).htersects(m.getRect(血 S)))〔 result.addElement(m); }

u ! 蒻

“ ヽ′

)

booleancheckJoinedQ {

booleanjoined = false; for (Enumeration e = containedModels(false).elernents0; e.hasMoreElements0;) { Model m = (Model)e.nextElement0; joined = (oined ii isJoining(m));

l

if (Fined

ii !(containedModels(true).isEmpty0)) {

px = oldPx; py = oldPy; width = old\ilidth; height = oldHeight; return true: )

return false; ) abctract boolean isJoining(Model m); abatract boolean isSameSort(Model m);

voidmouseUp0 { corner = 0; )

boolean nudge@vent e, int key) { if (lselected) retun false; int d = (l + (e-rnodifiers & Event.SHIFT_MASf; 't 9) * mm.getScaleo; if (key: lflX) py -= d; if (key == 1005) py r- d; if (key: lfl)6) px -= d if (key 10Cl/) px += d; if (lcheckJoinedQ) { addAreaO;

:

l return true;

l

早稲田大学渡辺仁史研 究室 1996年 度修士論文


群集波動 シミュ レー タ

/rt,十

19

PAD劇旺NG memods***

public b001ean inside(int x,int y){

re― ((X>PX&&xく =Pxlwiddl&&y>=Py&&yく =pytheightl&&layerNlm一 mm.getActivehyer 〕 void撤油 Mo{

Rectangle r∝ t=getR∝ 〈 n(getOldR∝ t()光 ).u五 〇

nlm.addArea“ o;

htぶ Cint

x){

re-Ooorcx_nlm.scrX)+mm.siza)・ Widul;

〕 int aYcint y)〔

re― ■ooro―

nlm.scrD+mm.SiZe().hetht;

}

int n00r(int a){

ret― (intpM価 .noor((dOuble)a/mm.getScaleo);

〕 int cenl(int→

retlm(inthM血 .Ceil((dOuble)a/mm.getscalく

));

)

void drawLnage(Graphics g,int acuveLayer){ r(!(mm.areahtersecttcnew R∝ tangleox,py,widt height))))retum;

r((layeFNum!=nun.getAciveLayer())&&nlm.getLayerMode()==1)rem;

sx=aXox);sy=aY(py); oldSx=aX(oldPX);01dSy=aY● ldPy); swidal=∝ 姐(Widm);sHcight=ceil(heightゝ oldSWidth=∝ u● ldWid■ 〉OldSHeight=ceil●

ldHeight);

r(!sameLayerNumm.getAcdveLayer))&&nlm.getterModec)==2){ g.setColorcColor.gray);

g.drawRect(sX,Sy,sWidぬ -1,sHeight‐

〕elSe〔 g.setCo10Kし

1);

CD;

g劇 lRect(sX,Sy,sWiddl,sHeight}

〃背 景 〃 オ ブ ジ エ ク ト描 画

drawObi∝ 唯 光 )

r("lected)〔 gosetColorcColor.red); g.3Ш Rect(sX,Sy,4,4);

g.FmRect(sX+SWid血 ‐4,sy,4,4); g。

lmR∝ t(sx,Sy

ttHeight‐ 4,4,4);

g.fmR∝t(sx+SWidd1 4,sy+sHeight‐ 4,4,4); mn,ib,s司 いcation(wid■ ,height,fal→

;

〃選 択 カ ー ソ ル の 表 示

〃寸法表示

}

)

void clearhagecraphics 3,int aciveLayer)〔

r(!(nlm.aratersec“ cetRect())))remm;

gosetColo<C010r.white);g.rlllRect● ldSX,01dSy,oldSWidt oldSHeight);

oldPx=px;oldPy=py; oldWid血 =widdl;oldHeight=heiま鶴〃旧座標更新 )

absLact void drawObi∝ くGraphics g光 public absmct vOnd sIЮ wPlot(洸

早稲田大学渡辺仁史研究室 1996年 度修 士 論文


群集波動 シミュ レー タ

20

package models;

import java.awl*; import java.util.Vector; import waveletSequence;

import waveletPlotFrame;

ll***t*

suB

classes

***,**

iRoomn

***'r class public abstract class Room exbnds Model

//****

{

llRoom

277

public Room(ModeManager mm, int px, int py, int width, int height, Rectangle minmax) { super(mm, px, py, width,height, mfumax); )

//*** Metllods 'l*'r boolean isJoining(Model m) {

switch(m.rotue) { case 0: case 2:

if (!(py <= m.py && py + height >= m.pX + m.height && (m instanceof Stairs li GetRect0 .intersection(m.getRec$)).width <= 6))) { rerurn true;

I break; case

l:

case 3:

if (!(px .intersection(m.getRect0)).height

<= m.pX && px + width >= m.px + m.width

&& (m

instanceof Stairs ii (getRect0

<= 5))) { return true;

l )

return false;

l boolean isSameSort(Model m) { return m instqrceof Room; )

public Sequence setDensity(Sequence seq, Model m) {

/ touch(m)); (densitySignal == null) { densitySignal = seq; ) else { densitySignal = densitySignal.sequenceAdd(seq);

soq = s€q.sequenceMulti((double)m.open0

if

)

Systern.out.println(toSuing0 + " : " + densitySigral.length$ + " : " + densitySignal); return seq; )

public void showPlot0 {

if

(densitySignal != null) { PlotFrarne pf = new PlotFrame(densitySignal, range);

Pf.show0; )

l

l

早稲田大学渡辺仁史研究室 1996年 度修 士論 文


●ι

群集波動 シミュレ… タ package models;

import import import irnport

java.awt*; javautil.Vector; j

ava.util.Enumeration; waveletSequence;

suB classes ***** sFiltern **** //***{. clrss

ll*****

public abstract class Filter extends Model Doors doors[]; int doorNum;

I

tpitter ? 2

7

private Sequence arrivals = new Sequence0; double percent;

intformWidth; private int ways = 0;

public FiltedModeManager mm, int px, int py, int width, int height, Rectangle minmax) { super(mm, px, py, width, height, minmax); )

//*:|* medrods :i{.* boolean isJoining(Model m) { switch(rotate), t""""

z,

if (!(py >= m.py && py + height <= m.py + m.height && (this instanceof Stairs ii (getRectO .intersection(m.getRecO)).width <= 6))) { return true; )

case

l:

break; case 3:

if (!(px >= m.px && px + width <= m.px + m.width && (this instanceof Stairs ii (getRect0 .intenection(m.getRect0)).height <= 6)) { renrrn true;

l皿

“l′

l

boolean isSameSort(Model m) { return m instanceof Filter;

l

F* * Values *l

are se,nt by Plaform.sendGenerator0

public void setGenerator(int pl, int p2, int forml-ength, int formWid0r, int enQ { waYs = 0;

pl =pl * 10001?3;p2=p2* IAOOI2S; formlangth = formlrngth * 1000 / 28; this.forrnWidth=formWidth/28; llmeter ent=ent* 1000/28; doorNum= (p2l4800) - (pl/21800); doors = new Doors[doorNum];

percent = (doubleXp2 - pl) / formlpngth; for (int i = 0; i < doorNum; i+r) { int at= (Pl /4800+ 1) * 48m + i * 48fi); doors[i] = new Doors(at - ent, pl - ent" p2 - ent);

I )

早稲田大学渡辺仁史研究室 1996年 度修士論文


群集波動 シミュ レータ

22

public void setAnival(Sequence seq) { if (ways+r > l) renrm; seq = seq.sequerrceMulti(percent); arrivals = new SequenceGeq.length0); for (int i = 0; i < doorNum; i+r) { doors[i].setArriva(seq); arrivals = arrivals.sequenceAdd(doors [i].getAnival0); )

arrivals = arrivals.sequerreMulti(l /((double)formWidth * 1.17

*

10));

//pv*h*10=N

)

public Sequence getArrivaQ { System.outprintln("getArrival = " + arivals.seque,ncelvlulti(1 / (double)ways)); return arivals.sequenceMulti(l / (double)ways);

l public void showPlot0 { returnl

I )

早稲 田大学渡 辺仁史研究室

1"6年 度修士論 文


群集波動 シミュ レー タ

23

package models:

importjava.aw七

;

mport waveleL中 //1*摯

;

*class"Aisle"****

〃通路クラス

public class Aisle extends Filter〔

=18,MINHEIGⅢ =18; MDⅢ =Integer.MAX VALUE,MAXHEICr=htegerMAX VALUE;

static halint MINWIDⅢ static halint MA漱

private static double coe■ ]=new dOuble14]; public Aislく MOdelManager mm,int px,int py,int widdl,ht height){

lec― DTH,MB田 国ЮⅢ ,M…

,pX,py'Widul,height,new R∝ 蜘喝 ¨ COefIOl=0; COef11]=-0.521:

,MAXHEIGHDン

coef12]=‐ 0.155; coef13]=‐ 0.091; )

void drawOuec〈 Graphics 3){ 3・

SetCO101C。

10r.Ы ack);

switchcrotate) {

case O:case 2:

g.fillRect(sX,Sy,sWid山 ,floo<6)); g.fШ Rect(sX,Sy tt sHcight― n。 。 <6),sWid血

,a∞ r(6));

break; case l:case 3:

g』ШR∝ t(sx,Sy,Ooo<6),sHcighO;

g.mR∝ t(sx+SWid■ ‐noor(6),Sy,Oooく 6),sHeighth; 〃通 路 描 画

〕 public String toS“

ngo{

remm"Aislcnone"+super.toSdng衛 〕 ■sinulations ⅢⅢ+ public Sequence setDensity(Sα pence seq,Model m){ SysLm.out.pman("calculating… :"+toStFing()); Sequence c□ =new sequence[5];

//t十

Sequence d[]=new SCquence[5]; C[Ol=Seq.sequenccMultic(dOuЫ c)m.tOuch(thiS)ノ open());

c[Ol.Fmatwolation(光

fOr(hti=1;i← ti持 ){ C[i]=C[i‐ 1].decOmposeToScaling(ゝ dlil=CIi‐ 1].decOmposeToWavelet();

)

//dCOmpOSe

fOr(int i=4;i>=1;i― ‐ )〔 dli]=d[i].SequenceMuldtta■ .pow((double)leng血 o,COef11-1])); CIi‐

}

1]=C[i]ご α∝)nSmct(d[il);

//MOnstruct

CIO].Shiftc(hⅨ cdOublolengu10′

10〉

C[0]=C10].SCalingSampleo);

renmcIO]; )

早稲 田大学渡辺仁史研究室 1996年 度修 士論 文


群集波動 シミュ レータ

24

package models;

importjava.awLt importjava■dl.V∝ tor;

import waveletSequeno;

mport waveletPlotF― ei //1+十

中 "daSS

Stairs"中

十■十

public class Stairs extends Filter{

〃階段クラス

sttic ttlalint MINWIDTH=280,MINHEIGⅢ「 =18;

static halint MAXWIDTH=420,MAXHEIGⅢ =hteger.MAX VALUE; publt StairsttodeManager nlm,int px,int py,int widt intheigho{

supa_Px,py,Widtheight,new RectanglecM― TH,MINHEIGHT,MAXWIDTH,MAXIIEIGHD洸 〕

boolean sameLayerNun(int lay∝ ){

re― teιりerNm()==layer l:geLayerNunO‐

1==layer洸

〕 Rectangle getRec〈

Model m){

if(!(SalneLayerNumぃ .getLayerNum())::m.sameLayeFNum(血 s.getLayerNum())))retum new Rectangle O,0,0,0);

mtr=Ю

tate;

if(m.geLyerNun()+1==Jis.getLayerNum())〔 F十 =2;

r=r%4; }

int w2=widm/2;int h2=height/2; switchcr) {

case O:

re― new

R∝ tangleox+W2,Py,w2,heightゝ

case l:

rettmnew RectangletPX,py,widdl,h22; case 2:

remm new R∝ tanglecpx,py,w2,heigho; case 3:

re― new

RectangleCPX,py+h2,widdl,h2ゝ

re― new

Rectangleo,0,0,0;

)

void drawObiectcCraphics g){

int centerSx=sx+SWi山 血ノ2;int centerSy=sy+sHeight/2; int of口 Vidぬ

=(ino(SHeight/346);int OttHeight=cintxSWiddlノ

346);

int scale=nun.getScale(); switchcrotate){

case O:case 2:{ g,se(〕oloく C010r.black);

r(scaleく =4)〔 fOr(int i=6;iく wid血 8・

‐2;i+=8){

drawLine(sX+n00<i),sy,SX+floor(1),sy ISHeight-1);

)

l elSe{ g.setColoく CO10r.ligh“

計ay洸

g.rlllRect(sX,Sy,sWiddl,sHeightゝ )

g.setCO10<C。 10r.blackゝ g.finRect(sX,Sy,sWidal,f10o<6)); g.fШ Rect(sX,Sy+sHeight‐

Ooo<6),sWidul,■ ∞r(6));

早稲田大学渡辺仁 史研究室 1996年 度修 士論丈


群集波動 シミュ レー タ

25

if (mm.getlayerModeO =:2) |

inti=pn(rotate/2); int j = ((getl-ayerNum0 == mm.getActivelayer0 ? I : -l) * i + 2) | 2; int x[ = {centerSx - offwidth, sx + (sWidth - l) * j, sx + (sWidrh - l) * j, centerSx +

offlilidth, centerSx - offWidth);

int yll = {sy, sy, sy + sHeight - 1, sy + sHeight - l, ty}; g.setColor(Color.white); g.fillPolygon(x, y, 5); g.setColor(Color.gray); g.drawPolygon(x, y, 5);

l )

break; case

l:

case

3:

{

g.setColor(Color.black); if (scale <= 4) { for (int i = 5; i < height - 2; i

r- 8) { g.drawline(sx, sy +floo(i), sx + sWidth - l, sy+floor(i)); )

) else ( g.setColor(Color.lightGray); g.fillRect(sx, sy, sWidth, sHeight); I g.setColodcolor.black); g.fillRect(sx, sy, floo(6), sHeight); g.fillRect(sx + sWidth - floor(6), sy, floo(5), sHeight); if (mm.getlayerMode0 =:2) ( in1 i = -pn((rorate - l) I 2); int j = ((getl-ayerNum0 : mm.getActivelayer0 ? inty11 -

I : -l) * i + 2) | 2;

={centerSy+offHeight,sy+(sHeight-l)*j,sy+(sHeight-l)*j,centerSy

offlleight, centerSy + offHeight); int x[1 = {sx, sx, sx + sWidth - l, sx + sWidth - l, sx}; g.setColor(Color.white); g.fillPolygon(x, y, 5); g.setColor(Color.gray); g.drawPolygon(x, y, 5);

l )

if

l (scale > 4) retum;

g.setColor(Color.darkGray) ;

Jwitch(rotate)

I

{

case0:

XePffits

{

g.drawline(sx, centerSy, sx +sWidth - I, centerSy); int x[] = {sx + sWidth - 3, sx + sWidth - l, sx +sWidth - 3, sx + sWidth - 3 } ; int y[1 = {centerSy - 2, centerSy, centerSy + 2, centerSy - 2}; g.drawPolygon(x, y, 4);

l

llifi,,

g.drawline(centerSx, sy, centerSx, sy + sHeight - 1); int x[] = {centerSx + 2, centersx, centerSx - 2, centerSx + 2}; int y[] = {sy + 2, sy, sy + 2, sy +21; g.drawPolygon(x, y, 4); )

HS,,

g.drawline(sx, centerSy, sx +sWidth -1, centerSy); intx1l = {sx + 2,sx,sx + 2, sx + 2}; int y[1 = {centerSy + 2, centerSy, centersy - 2, ce,nterSy + 2}; g.drawPolygon(x, y, 4);

l break:

早稲田大学渡辺仁史研究室 1996年 度修 士論文


群集波動 シミュ レー タ

26

case 3:〔 1); g.drawLheccentersx,sy,centerSx,sy+sHcight‐ ntX□ ={蜘 terSX-2,centerSx,centerSx+2,centerSx‐ 2}; int y[]={Sy+SHeight‐ 3,sy+sHcight‐ 1,sy ttHeight-3,sy+sHelght‐ g.drawPoly30n(x,y,4);

)

3);

〃階段描画

public String toStin3()〔

re― "Stairs:none"+super.toString(); 〕

〃十■*simulations'*十 public Sequence setDenshy(Sequence seq,Model m)( boolean up=(m.getterNumo!=血 S.getLyerNum()洸 Syskln.out.pnndn('iCalCulating¨

.:''十 tOString());

Sequence c□ =new sequence[3]; Sequence d□ =new sequence[3];

C[0]=Seq.sequenceMulti((dOuЫ C[Ol血副 ht賀 Юlation(ゝ

eン n.tOuch(■ 五S)ノ open());

dOuble∞ et int v;

rOp){ coef=Madl.sqr〈 0.354745);

v=80■ 340/60Ⅲ

10;

)elSe{ coef=Math.sqr〈 0.462957); v〓 110Ⅲ 340ノ

60+lo;

}

fOr(int i=1;iく =2;iI「 ){

C[il=C[i-1].decOmposeToSding(); d[i]=C[i‐ 1].decOmposeToWavdet();

)

//deCOmpOse

fOr(int i=2;i>=1;i― ){ d[i]=d[il.SequenceMulticMadl.pow((dOuble)lengalC),((i==2)?coef:0))); C[i‐

)

1]=CIi].recOnsmct(d[i]);

//reCOnsmct

C[Ol.Shiftc(inth((dOuЫ Olenguloノ V));

CIO]=C[0].SCalingSttΨ leo);

rem C10];

〕 )

早稲 田大学渡 辺仁史研究室 1996年 度修 士論文


群集波動 シミュ レー タ

27

package models;

import java.awl*;

import sin.GateDialog; import waveleLSequence;

//****

claqs "Gate"

****

publicclass Gate extends Filter { ll&t'LE, 7 7 satic final int MINWIDTII = 64, MINHEIGIIT = 48; static final int MAXWIDTH = Integer.MAX-VALUE, MAXHEIGHT = IntegerMAX-VALUE; GateDialog dialog; int inGates = 0: public Gate(ModeManager mm, int px, int py, int width, int height) {

super(mrapx,py,width,height,newRectangle,(MINWIDTII,MINHEIGIIT,MAXWIDTH,MNCIEIGHT)); dialog

-

new GateDialog((Frame)mm.ftm,

this);

)

void clicked(Event e, int x, int y)

{

super.clicked(e, x, y);

if (e.clickCount:2 && selected) { dialog.showO;

l l public int Cetln0

{

return inGates;

l public void setln(int in) [ inGates = in: )

void drawObjec(Graphics g) { int scale = mm.getscaleO;

if

(scale >

4)

{

C.setColor(Color.yellow); g.fillRect(sx, sy, sWidrh, sHeight); )

g.setColor(Color.black);

switch(rotate) { case 0: case 2:

g.fillRect(sx, sy, sWidth, floo(6)); g.fillRect(sx, sy +sHeight -floo(6), sWidth, floor(5));

if

4) { intn = geGatel.{um0; for (int i = 0; i < n; i++) { int xx = sx + sWidth/2 - 27 | *ale; int YY = sY + (20 + i * 28)/scale; g.drawRect(xx , W, 54 | scale, 12 / scale);

(scale <=

) )

brealq case 1: case 3:

g.fillRect(sx, sy, floor(6), sHeight); g.fillRect(sx + sWidth -flood6), sy, floor(5), sHeight);

if

(scale <=

4)

{

int n = getGateNumo; for (int i = 0; i < n; i+r) { int xx = sx + (20 + i * 28) / scale; int YY = sY + sHeight/ 2 - 2l I scale; g.drawRect(xx , W, 12 I *ale, 54 / scaleX

I I break; l

早稲 田大学渡 辺仁史研究室 1996年 度修 士 論文


群集波動 シミュ レー タ

23

l publicintgeGateNumQ { r€htrn (rctate (6 ).

28);

-

0) ? (int) Math.ceil((double) (height - ,10) / 28) I (int) Matluceil(double) (width - 40)

l publicintopen0

{

return (intx(float)geGateNumO * 550

/

1000);

)

public Suing tostringo ( rctutn "Gate:none' + super.toString0; )

//*** sinulad.ons **'f public Sequence setDensity(Sequence seq, Model m) { System.out.println("Calculating... : " + toString0); Sequerrce Sequence

c[] = new Sequencel4]; d[] = new Sequence[4];

c[0] = seq.sequenceMulti((double)m.touch(t]ris) / openO); c

[0].fi ndlnterpolation0

;

l; i <= 3; i+r) { c[i] = s1i - ll.decomposeToScalingO; d[i] = s1i - ll.decomposeToWavelet0;

for (int i =

)

//decomPose double coef= 0.12 * c[0].energy0 / d[3].energy(1; d[3] = d[3].sequenceMulti(coef); for (int i = 3; i >= 1; i-) { c[i - 1] = c[i].reconstruct(d[i]); //reconstruct

l

c[0].shif(1); c[0] = c[0].scalingSample(0); retum c[0]; ) )

早稲 田大学渡辺仁史研究室 1996年 度修 士論 文

/


群集波動 シミュ レー タ

29

PCkage model露 importjava.awL●

;

mportJava‖ 血.Vctor; mport waveleLSequence; 〃十■中●claSs"SqldareW'■ ●*

public class Square extends Room{

〃広場クラス

static halint MINWIDTH=18,MINIIEIGHT=18;

staticttnalint MttDTH=Integer.MAX_VALUE,MAXHEIGHT=hteger』

ИAXttVALIIE;

public Square(ModeManager mm,htpx,int py,int widm,mt henght)( S呻願 鰤 m,PX,py,Widtheightnew

,…

R∝ 堕 り

,MAXWIDTH,MttEIG則

voiddnwObieCtCGraphics 3){ gosetColoく CO10r.black);

g.rlllRectcsX,Sy,sWidth,flooく 6)); g.■

皿Rect(sX,Sy+sHcight― fl∞ く6),sWidt f100r(6));

g.rluRect(sX,Sy,Oooく 6),sHeight);

g.rmRect(sX ISWidぬ ‐Ooo<6),sy,■ ∞ r(6),sHeight光

〃広 場 描 画

)

public String toStringo{

rettm"Square:none"+super.toStrmg(〉

〕 )

早稲 田大学渡 辺仁史研 究室 1996年 度修士論文


群集波動 シミュ レー タ package models;

irnport irnport import import import import

java.awt*; java.util.Vector; java.util. SaingTokenizer; j ava.util. Enumeration; ava.util. Hashable; java.util.Date; j

import sim.*; importwavelet*;

//*'l**

class 'Pladrormn

*'l'r*

publicclass Pfatform extendsGenerator I ll /7 v F^-LD satic final int MINWIDTH = 28(X), MINHEIGHT = 112; static final int MAXMDTH = Integer.MAX-VALUE, MAXHEIGHT = Integer.MAX_VALUE; public DiagrarnPath diagramPathl = new DiagramPath0; public DiagramPattr diagramPath2 = new DiagramPattr0;; public int arrivall = 0; public int arrival2 = 0; public Vector routes = new Vector0;

A

Sequence arrivals;

public Pladorm(ModeManager mm, int px, int py, int width, int height) { super(mm, px, py, width, height, new Rectangle(MINWIDTH, MINIIEIGHT, MAXWIDTI{, MA)GIEIGHT)); dialog = new PlatformDialog((Frame)mm.fu, mt);

I public int getlf,ngth0 { int ouput = (rotate

7o

2 == 0) ? getWidth0 : getHeight0;

rcturn output;

l void drawobjr:ct(Graphics g) { int scale = mm.getScaleO; g.setColor(Color.white); float xOffset = (rotate 7o 2) * 42 + ((rotate + L) Vo 2) * 140:. float 5Offset = (rctate Vo 2) * L40 + ((rotate + l) 7o 2) * 42; for (int i = 0; i <= l; i++) {

for(intj=0;j<= l; j++) { intx11 = {sx+sWidth*i,sx+sWidth*i,sx+sWidth*i-(intxxoffset*pn(i)/scale)};

fuy[=

{sy+sHeight* j,sy+sHeight* j-(int)(yOffset*pn()/scale),sy+sHeight*jf

g.fillPolygon(x, y,3);

;

l l super.drawObject(g); )

public String toString0 { Suing s = ":";

r{-

s diagramPath l.toStringO; '," + arrivall + ","; s s += diagramPath2.toStringO; s += "," + arrivaD;

return "Platform" + s + super.toSringQ;

l

早稲田大学渡辺仁史研 究室 1996年 度修 士論 文


群集波動 シミュ レー タ

31

Methods for simulation *** public void setAcributes(String O {

//***

StringTokenizer st = new SuingTokenizer(s, ","); (st.cormtTokensO != 4) retum; diagnrnPathl.setPath(st.nextTokenO) ; arivall = Integer.parselnt(st.nextTokeno); diagranPath2. setPath(st.nextTokenO) ; anival2 = Integer.parseln(st.nextToken0); if ( ldiagramPatM.equals(" ")) { dialog.setDouble0;

if

) )

public void addRoutes@outes r) { routes.addElemen(r);

l public void resetRoutesQ { routes.remo veAllElements0

;

)

public void sendGenerator0 { if (routes.isEmpty0) reum; Hashtable filters = new HashtableO; for (Enumeration e = routes.elementsQ; e.hasMoreElements0;) { Filter f = (Filter)(((Routes)e.nextElement0).nexNode(this)); filters.put(new Integedrotate 7o 2 == 0 ? f.centerXO : f.centerYO), 0; )

Vector keys = new Vector0; keys.addElement(new Integer(nteger.MAX_VALUE)); for (Enumeration e = filters.keys0; e.hasMoreElements0;) { int tempKey = Integer.parselnt(e.nextElement0.tostring0);

inti=0;

while (tempKey > Integer.parselnt(keys.elementA(ir-+).toSuing0)) keys.insertElementAt(new Integer(tempKey), i - 1);

{;}

)

keys.removeElementA(keys.sizeO

- I );

for (int i = 0; i < keys.size{; i++) { Filter f = (Filter)(fi lters.get(keys.elementAt(i))); int a = Integer.parselnt(keys.elementAt(i).toString0); int pl; int p2;

if

(i-0)

[

pl = ) else

pl if (i

:

(rotate 16 ).

--

0 ? px : py);

{

= (a + Integer.parselntfteys.elementAt(i - I ).toStringO)) / 2;

)

(keys.size0 - l)) { p2 = (rotate Vo 2 ==0 ? px + width : py + height); ) else { p2 = (Integer.parselnt(keys.elementAt(i + 1).toStringO) + a)

l2;

l

f.setGeneraodpl, p2, (rotate Vo2== 0 ? width: height), (rotzteTo2==0? height: width), a);

l )

早稲田大学渡辺仁史研究室 1996年 度修士論丈


群集波動 シミュレー タ

32

public void setArrival(Date start, Date end) { Vector ouput = new VectcO; Sequerrce sl = diagramPathl.getAriva(start, end, arivall); Sequence s2 = diagramPath2.getArrival(start, end, anival2);

if(s2 !=null)

(

arivals = s l.seque,nceAdd(s2);

I else

{

alrivals = sl; I

if

(routes. isEmptyQ) retum;

for (Enurneration e = noutes.elements0; ehaslvloreElementsO;) { ((Filter)(((Routes)e.nextElernen$).nexNode(ttris))).setArrival(arrivals); I

l public Date getStartTime0 { Date tenrpl = diagramPathl.startTime0; Date temp2 = diagramPath2.startTime0; if (templ null) return null; if (temp2 -!= nulD { templ = (templ.after(temp2) ? templ : temp2); )

renrn bmpl;

l public Date getEndTime0 { Date ternpl = diagramPathl.endTimeQ; Date ternp2 = diagramPatM.endTimeQ; if (templ : null) renrn null;

if (temp2 != null)

{

templ = (ternpl.before(temp2) ? templ : temp2); )

return templ; ) )

早稲田大学渡辺仁史研究室 1996年 度修士論文


群集波動 シミュレー タ package models;

import java.awt*; import java.util.Vector; import java.util.Date;

importsim.*; import waveleLSequence;

//*r.** class "Outside" ***r,

#fll I Z

I

public class Outside exbnds Generator ll satic final int MII{WIDTII = 18, MINHEIGHT = l8; static final inIMAXWIDTH = Integer.MAX-VALUE, MAXHEIGHT = IntegerJr{AX_VALUE;

public int anival = 0;

public Outside(ModeManager mm, int px, int py, int width, int heigh$ { super(mm, px, py, width, height, new Rectangle(MINWIDTTI, MINHEICHT, MAXWIDTTI, MNGIEIGHT)); dialog = new OutsideDialog((Frame)mm.frm,

this);

l public void setAnributes(Suine s) {

arival = Integer.parseln(s)

;

l //**:t simulations'*'t:t public Sequence getArriva(Date start, Date end, Model m) { vector vec = new Vectoro; Double d = new Double((double)anival /(1.4 * touch(m) / 28 * 10)); lllAmlsec for (int i = 0; i < (end.getTime0 - start.getTime0) / 10000; i+r) { vec.addElement(d); )

rennn new Sequence(0, vec); )

void drawObject(Graphics

g) {

super.&awObject(g); )

public String tostringO { return "Outside:" + arrival + super.toSting0;

l l

早稲 田大学渡 辺仁史研究室 1996年 度修 士 論文


群集波動 シミュ レー タ // class

Simulator

34

19D7.1.9-

package sim;

import j ava.util. Vector; import j ava.util. Enumeration; import java.util.Date;

importmodels.*; import waveleuSpline4; public class Simulator extends Object implements Runnablef

ModeManagermm; Vector routes = new Vectorol

public Date start, eNld; SimDialog simDialog; Thread tluead; //*

**

Constructors r?**

public Simulato(ModeManager mm) { suped); this.mm = mm; srarr = new Date(97,0, l); end = new Date(97,0,2);

simDialog = new SimDialog(rnm.frm, this); Spline4 s = new Spline,40;

l //*** Methods *** public void doSimulationQ { findRoutesO; //finds routes available. sendRoutesO; //tells Platforms the Routes they have. sendGenerator0; //tells Filters who is their Generator simDialog.showQ; )

private void findRoutesO { routes -renroveAllElemens(X for (int i = 0; i < mm.geModelArray0.sizeO; i++1 1 Model m = mm.getModel(i); if (m instanceof Plaform) { Pladorm plf = (Plaform)m; plf.resetRoutes0; Routes r = new Routes(m, mn, this); ) )

System.out.println(this.toString(

)) ;

l private void sendRoutes0 {

for (Enumeration

e = rout€s.elements0; eJrasMoreElements0;) {

Roures r = (Routes)(e.nextElement0);

Pladorm plf = r.geGenerator0; plf.addRoutes(r);

l

)

早稲田大学渡辺仁史研究室 1996年 度修士論文


群集波動 シミュ レータ

35

pnvate void sendGenerato() { for (int i = 0; i < mm.geModelArray0.sizeO; i++1 Model m = mm.getModel(i); if (m instanceof Pladorm) { Plaform p = (Pladorm)m;

1

p.sendGenerator0;

Date t€mpl = p.getStartTime0;

if (rcmpl != null) ( if (templ.after(start))

start =

templ;

l

Date t€,rrp2 = p.getEndTime0; if (temp2 != null) { if (temp2.before(end)) end = temp2; )

simDialog.resetTimeQ;

l l )

public void tellTime{Date start, Date end) { //told from SimDialog for (int i = 0; i < nm.getModelAnay0.sizeO; i++) 1 Model m = mm.geModel(i); if (minstanceof Pladorm) { ((Pladorm)m).setArrival(start, end); )

l )

public void docalcO { mm. frm.setCursor(ava.awt.Frame.WAIT_CURSOR); tluead = new Thread(this); thread.startO; for (Enumeration e = routes.elements0; etrasMoreElemens0;) {

((Routes[e.nextElement0)).clearDensity((in$((end.getTime0 - start.getTime0)

/ 10000);

)

)

public void run0

uY{

{

//calculation

thread.sleep(2fiX)); I carch(IntemrptedException e) { )

for (Enumeration e = routes.elementsQ; e.hasMoreElemensO;) { Routes 1 = (Routes)(e.nextElement0); r.doCalc(start, end);

I

if(thread != null) { mm. fi m.setCursor(j ava.awt.Frame.DEFAULT_CURSOR);

System.outprhtln("OK!

"

);

ttuead.stopo; thread = null; ) )

void addMe{Routes r) { routes.addElemen(r);

l public String toSningO {

inti=0:

Suing result = new Sring0; for (Enumeration e = routes.elements0; elrasMoreElementsO; result r- i + " : " + enextElement0.toStringo +'Yn";

i+r)

{

)

return rcsulq )

I

早稲田大学渡辺仁史研究室 1996年 度修士論文


群集波動 シミュ レー タ

36

l** * *

* * * r, * 't

Soquerrce class (for Wavelet calculation)

t996.4.2l-5.t7 1995.11.21-11.28

Each'Sequence" has 2 elernents. The form ofdata is [Index, Body]. flndex] is the minimum order, and [Body] is a Vector of the data sequence.

'l

*

Sources : S. Sakakibara, Beginner's Guide to Wavelets, Tokyo Denki Univ. hess, 1995.

*@version l.O,l996llln8 * @author Tomoyuki HIGUCHI !t *l package wavelet;

import j ava.util. Vector; import j ava.util.Enumeration; import sim.EnorMessage;

public class Sequence exbnds Vector {

l** * The two-scale sequence of the scaling function. *l static protected Sequence pSequence;

F* * The two-scale sequence of the mother *l

wavelel

static protected Sequence qSequence;

l+*

* The decomposition

*l

sequence

which is a LFF, of 0re mother function.

static protected Sequence gSequence;

l**

* The decomposition

*l

sequence which is a HPF, of the mo0rer function.

static protected Sequence hSequence;

l** * The values od the scaling fimction *l

at integer knots.

static prot€cted Sequence scalingAtKnots; static protected Sequence interpolationSeq4;

//*** Construclsls !*'** public Sequence0 { suped2); )

public Sequence(int fust, Vector last) { thisO; this.addElement(new Intege(first)); this.addElementfl ast); )

早稲 田大学渡辺仁史研究室 1996年 度修 士論 文


群集波動 シミュ レー タ

37

public Sequence(int size) {

this0; this.addElement(new Intege(O)); Vector vec = new Vectodsize); for (int i = 0; i < size; i+r) { vec.addElement(new Double(0)); ) this. addEleme,nt(vec) ;

l //t**r

****

Metlrcds

//** Basic functions ** public double objToDouble(Object o) { return Double.valueOf(o.toStringQ).doubleValud); )

public synchronized int firsO { return Integer.parselnt(this.firstElement0.toString0);

l public synchronized Vector last0

(

return (Vector) this.lastElement0; )

public int leneth0 {

renrn last0.sizeO + firs0;

|

ilretums the number of elements lager than Index 0

public void addToElementAt(double d, int i) { Vector last = this.lasto; double e = objToDouble(last.elementA(i));

d+=e;

last.setElementAt(new Double{d), this.removeElementAt( I ); this.addElement(last) ;

i - this.first0);

)

public void shift(int dt) {

if (dt<=0)

{

int i = first0; this.setElementA(new Intege(i + dt), 0);

) else { for (int i = 0; i < dt; i+r) ( this.insertElementA( "0", 0); ) )

l l** * Takes "num" *l

elements form position

Sequence take(Sequence seq, int from,

"from".

intnum)

{

from -= this.firsto; if ((ftom < seq.flustQ) ii (from + num > seq.first0 + seq.lasO.size0)) { ErorMessage ern = new ErrorMessage("error! : [take] Out of range."); return

null;

l Vector trnp = new Vector(num); for (int i = 0; i < num; i+r) { unp.addElement(seq.last0.elementAt(from

- seq.first0 + i));

)

rennn new Sequence(from, tnp); )

早稲 田大学渡 辺仁史研究室 1996年 度修 士論文


群集波動 シミュ レータ

38

l** * Gives the "Energy" *l public double ercrgy0 { double sum = 0; for (Enumeration e = (this.las$).elementsO; e.hasMoreElementsO;) { sum += Math.pow(objToDouble(e.nextElernen0), 2); )

return sum;

l

/f*

r* *

Sequence manipulations

**

Gives the upsampled sequence of the original data.

*l

Sequerrce upSample(Sequence seq) {

vector tmp = new vector(seq.last0.sizeo * 2 -l);

int i = *'1"tt0.size0;

for (int i = 0; i <j; i+-r) { tnp.addElement(seq.last0.elementAt(i));

if (i

!=

j-l)

tmp.addElement("0");

I

return new Sequence(seq.first0 * 2, uttp);

l l** * Gives the downsampled sequence of the original *l

data

Sequence downSample(Sequence seq) { Vector last = seq.lastO;

if (seq.first0

4o

2 == I ) last.removeElementA(0); last.addElement("0");

if (last.size0 Eo 2: l) int i= l"t1t1r",rrt'

Vector tmP = new Vector(i); for (int i = 0; i < j; i+-t) { unp.addElement(last.elementA(i

* 2));

)

renun new Sequence((int) Math.ceil((double) seq.first0 / 2), tmp); )

早稲田大学渡辺仁史研究室

1"6年 度修士論文


群集波動 シミュ レー タ

F*

39

Gives the sum of the two data sequences, by tapping zeros in appropriate locations.

1

public Sequence sequenceAdd(Sequence cs€q) { int idx = this.first0 - cSeq.first0; Vector add = new Vecto(idx > 0 ? ttris.last0.size0 : cSeq.last0.sud)); add = (idx > 0 ? dris.last0 : cSeq.lastO); Vector tmpa = new Veco(Math.abs(idx) + add.size0); for (int i = 0; i < Math.abdidx); i+r) ( unpa.addElernen("0"); )

for (int i = 0; i < add.size0;

i+r)

{

tmpa.addElemen(add.elementA(i))

;

)

Vector tmpb = new Vector(idx > 0 ? cSeq.last0.size0 : this.last0.size0); tnpb = (idx > 0 ? cSeq.last0 : ttris.last0); idx = trnpa.size0 - tmpb.size0; Vecror vecl = new VectodMath.max(trnpa.size0, rnpb.sizeo)); Vector vec2 = new VectodMath.max(tmpa.size0, tnpb.sizeo)); vecl = (idx > 0 ? tmpa : rmpb); vec2 = (idx > 0 ? tmpb : tmpa); for (int i = 0; i < Math.ab(idx); i+r) { vec2.addElemen("0"); )

Vector add2 = new VecEor(vecl.sizeo); for (int i = 0; i < vecl.sizeQ; i+-r) { double d = Double.valueOf(vecl.elementA(i).tostring0).doubleValue0; double e = Double.valueOf(vec2.elementA(i).toString0).doubleValue0; ad2.addElement("" + (d + e));

l

renrn new Sequence(Math.mh(this.firstO, cSeq.first0), add2); )

l** * Gives multiplied *l

Vector.

public Sequence sequenceMulti(double m) { Vector last = lasto;

Vector temp = new Vecb(last.size.,0); for (int i = 0; i < last.size0; i+r) { double d = f,)rouble.valueOf(lastelementA(i).toStringo).doubleValue0; d *=mi temp.addElemen(new Doubldd));

) Sequence out = new Sequence0;

out.addElement(new Integer(first0)) ;

out.adaFlemen(temp); rennn out; )

早稲田大学渡辺仁史研 究室 1996年 度修 士論 文


群集波動 シミュ レータ

40

//** Convolution **

l**

* Gives the list obtained by the convolusion of frlter and data. * The data boundary is treated as free.

,l

synchronized Sequence lisConvolve(Sequence filter, Sequence data) { Vector lestData = data.las0;

int fl = filter.las0.size0; Vector sup = ns\il Vecto(); for (int i = 0; i < (fl * 2 - 2); i+r) sup.addElemen("0"); for (int i = lastData.siz{); i > 0; i--) { sup.insertElementAt(lastData.el€rnentAt(i - I ), fl -

l);

)

sup.trimToSize0; Vector tmp = new Vector(sup.sizeo - fl + for (int id); i < sup.sizeQ - fl + l; ir-r) { Vector part = new Vector(fl); for (int j=0; j < fl; j++) {

l);

part.addElement(sup.elernentAt(i + j));

l trnp. addElement(paft ); )

Vector tmp2 = new Vector0; for (int i = 0; i < unp.size0; i++) { Vector elem = (Vector) rnp.elementAt(i); double w = 0; for (int j = 0; j < fl; j++) ( double f = objToDouble(filter.last0.elementA(fl double d = objToDouble(elem.elementA());

-

j - l));

w+=f*d; l

unp2.addElement(new Double(w)); )

tnp2.uimToSizeO; retum new Sequence(filter.firsO + data.irst0, tmp2);

l //** Finding

function values from coefficients

l** * Gives the scaling *l

**

function expansion coefficients which interpolates the data

public synchronized void findlnterpolation0 { Sequence se9 = listConvolve(interpolationSeq4, this.removeAllElements0;

this);

this. addElement(seq.elementA(0) );

this.addElement(seq.elementA( I )); )

lt*

* Gives the list of {x, y[x]] pairs, where y[x] is the scaling function with data * taken as the expansion coefficients, evaluated at the integer knots x n. =

*l

public Sequence scalingSample(int Sequerrce onp = this'

j) [

Sequence tmp2;

for (int i = 0; i < j;

i+r)

{

tmp2 = listConvolve(pSequence, upSample(tnp)); UnP = tmP2;

l renun listconvolve(scalingAtKnots, tmp); )

早稲田大学渡辺仁史研究室 1996年 度修士論文


群集波動 シミュ レータ

41

l**

* Gives the scaling function

expansion coefficients of one less resolution level

* by decomposing the scaling furrction expansion coefficients daa.

*l

pubtc Sequence decomposeToscaling0 ( renrn downsarnple(listConvolve(gSequence, this));

l

l** . Gives the wavelet expansion coefficients I

of one less resolution level by decomposing the scaling furrction expansion coefficients data.

*l

public Sequence decomposeToWaveleO { return downSample(lisConvolve(hSequence,

this));

)

l**

* Reconstructs the scaling function expansion coefficients

* from this(the

*

scaling frrnction expansion coefficients) and cSeq(the wavelet expansion coefficients) at one level lower.

*l

public Sequence reconstnrct(Sequence cSeq) { reurrn (listConvolve(pSequence, upSample(this))).sequenceAdd(listConvolve(qSequence, upSample{cseq)));

l

)

早稲田大学渡辺仁史研 究室 1996年 度修 士論文


群集波動 シミュ レー タ

42

* + * 摯 spline4 chss(fOr Wavelet calculation)

r・

* *

19964.21‐ 5.17

1996.11.21‐ 11.28

*

"Spline/4"has he sequences b be“

cubic B― spline.

十Sollrces:S.Sakakibarat Begim♂ s Cuide to Wavelets,Tokyo Denki U五 v.Pr“s,1995.

中@v∝ da1

+@au■ Or

1.0,1996rH28 TOmoyuki HIGUCHI

*

十ノ package wavdet; importiava.10・ PrintStream;

mportJava.udl.V∝ to弓 public class Spline4 extends Sequence{ static private Vector roots4=new V∝ to(3); static Fmal double r∞

t2=Ma血 .sqrt(3)-2;

public Spttp4(){ super();

r(Psequence一 nun){ setSequences(洸

〕 〕 public Spline/(int rlrst,v∝ tor hst){ SupeKflrst,lastゝ

if OSequence==nun)setsequences(); )

/1■

*Makes new"SplineZ"拠 ● /

public SPline4(V∝ tor dat→ SupeKO,data); mdlnterp01ation();

tance,which data is interpolated. {

rrt・

+,Me面 ds十 十十十

//1tt Basic functions十

*

private intmulicint m){ int s=1;

fOr(int i=m;i>0;i― )( “ ヽ′

s■ =i; )

private intbinomial(intm, intk) { if ((k < 0) ii (k > m)) return (0); int nrmrer = 1;

intdenomi= 1: for (int i = m - k + 1; i<= m; i+t) numer *= i; for (int i = 1; i <= k; i+t) denomi *= i; rcturn (numer / denomi); I

早稲 田大学渡辺仁史研 究室

19%年 度修 士論文


群集波動 シミュ レー タ

43

B_Spline wavelers ** double bSpline(int m, int x) { double tmP = 0; for (int k = 0; k <= m; k+-r) { trnp rE Marh.powGl, k) * binomial(m, k) * Math.pow((x > k ? x - k : 0), m - 1);

//**

)

tsnp/=multi(m- l); rentrn tmp;

I

l** * Makes *l

B-splines. (for the purpose of future extension)

public void makeSplin{int m) { Vector binom = new Vector(m + l); Vector tmps = new Vector(m + 1); for (int k = 0; k <= m; kr+) { double d = binomial(m, k) /Math.pow(2, (m - l)); binom.addElement(new Double(d)); double e = bSpline(m, k); unp5.addElement(new Double(e));

l

Vector euler = new Vecto(2 * m -1); for (int k= l; k <= 2 * m - l; k+-r) { double d = bSpline(2 * m, k); euler.addElement(new Double(d)); )

pSequence = new Sequence(0, binom);

Vector tmp2 = new Vec!or(binom.siz4)); for (int k = 0; k < binom.size0; k+r) { double d = Math.pow(-t, k ?o 2) * objToDouble(binom.elementAt(k)); tmp2.addElement(new Double(d)); )

Sequerrce

trnpl = new Sequence(0, tmp2);

Vector tmp4 = new Vector(euler.sizd)); for (int kd); k < euler.size0; k++1 1 double d = Math.pow(-\ k qo 2) * objToDouble(euler.elementAt(k)); tmp4.addElement(" " + d); )

Sequence trnp3 = new Sequence(0, qSequence =

tnp4);

listConvolve(fnpl, trnp3);

scalingAtKnots = new Sequence(0, nnp5); )

Vector truncatedEuler(Vector lis, int n) { Vector oulput = new Vector(2); Vector nest = new Vector(lis.sizeo); Vector range = new Vector(lis.sizeO); Vector join = new Vector(lis.sizeO); double times = -l;

for (int i=0; i < lis.size,0; i+r) { Vector trnpl = new Veclor(lis.size0); for (int j=O; j < lis.size0; j+r) ( bnpl.addElement(lis.elementA((i + i)

7o

lis.size0));

l nest.

addElement(tmpl );

早稲田大学渡辺仁史研 究室 1996年 度修 士論文


群集波動 シミュ レータ

44

Vector tmp2 = new Vecbr(n*2 +1); double e = objToDouble0is.elementA(i)); times *= e; for (int j=-p; j <= ry j++) { tnp2.addElement("" + Math.pow(e, Math.abs0)));

l range. addElement(unp2) ;

Vector part = new Vecbr((Vector) neslelementAt(i)).size{));

pat = (Vector) nest.elementAt(i);

Vector tmp3 = new Vectod); double b = l; for (int j = 0; j < Parrsizeg; j+r) { b *= I - objToDouble(parrelementAt(0)) * objToDouble{part.ele,mentAt(i)); )

for (int j=1;; < lis.size0; j+-r) { b *= - 1 +objToDouble(parrelementAt0)) / objToDouble(part.elementA(0)); )

join.addElement(new Double(b)); )

for (int id); i < n *2 +l; i+r) { double d = 0; for (int j=0; j < lis'sizeo; jr-r) { Vector part = (Vector) range.elementAt(); d += times / objToDouble(oinelementAt(l))

* objToDouble(part.elementAt(i));

)

ouput.addElement(new Double(d));

l return output;

l void makeSplineGHSequence(int m, Vector lis, int Vectorbinom = new Vector(m + 1); int mul = multi(2*m -1); for (int k d); k <= m; kr-r)

trfter)

{

{

double d = binomial(m, k) / Math.pow(2, m); binom.addElement(new Double(d)); )

Vector euler = new Vector(2 * m -

l);

for

{

(intk=

1;

k<= 2 *m - 1; kr+)

double d = mul 't bSpline(2 * *, k)t euler.addElement (new Double(d));

l Sequerre trlis = new Sequence(nOrder, truncatedEuler(lis, tOrder));

(trlis));

gSequence = listConvolv{listConvolve(new

Sequence(-m, binom), new Sequence(l - m, euler)), upSample

Vector trny' = new Vecto(binom.size0); for (int kd); k < binom.size0; k++1 1 double d = mul * Math.pow(-l, (k+l)Vo 2) * objToDouble(binom.elementAt(k))l tmp4.eddElement("" + d); ) Sequence trnp3 = new Sequence(l - 2 * m, tmp4); hSequence = lisConvolve(tnp3, upSample(ulis)); )

早稲田大学渡辺仁史研究室 1996年 度修士論文


群集波動 シミュ レー タ

45

〃十■spline4=Cubic Spline■ ● ″中 中se撻 血D sequences of cubic B‐ spline. ● ノ vOnd setsplh引 K){ makeSplinc(4光

double angle=Maぬ .atan2(7攀 Ma■ .sqrtcl

lSЮ 5),-5166);

int us[]=〔 o,4,2〕 ;

fOr(int i=o;iく

3;H+){

double r=2+Maぬ ,sqrt(301)*M劉 ね。 ∞S((angle+1ヽ [i]+Math.PDノ

3ゝ

double n=r-20+Maal.sqrtcMa血 .POW((r_20),2)-1〉 roots4.addElernen〈 new Double(→ 〉 〕 makeSplineCHSequence“ ,roo厖 4,9);//Truncadon order=9 int iOrder=5;

Vector mp=new V∝ to<); Vector mp4=new V∝ Юく1洸

m「/4.addElementcnew Doublく r00t2漱 mp=mncatedEuler(mp4,10rder光 Vector mp2=new Vecto<mp.size()光

fOr(hti=0;iく unp.sizc();i++){ double d=obiToDouЫ e(mp.elementAt(1)); mp2.addElement(""+(d+6)); )

interpolatbnSeq4=new Sequence(-10rder‐

2,mp2沈

〕 夕■

十Also sets dle sequences of cubic B― spline,works faster cos alere is no calculatlon. ● /

private void setSequenceso{

double pseq[]={0.125,0.5,0.75};

pSequence=new Sequence(0,dOubleToV∝ toroseq)); ={0.m00248015873015873,-0.∞ 3075396825396825,0.“ 15922619“ 7619, -0.196031746031746,04583829365079365,‐ 0.6017857142857143);

double qseq□

qSequence=new Sequence(0,dOubleToV∝ tor(qseq)); double gseq[]={-2.691596629792036e-7,Ю .00003337579820942126,‐ 0.0004508779167288531, -0.002065086053365961,-0.00413228880650981,‐

0.002672941893356771,0.u12745246405042Hl,

0.002866114062136573,Ю .005579983284013115,-0.005387929818552135,0.01042405218653248, 0.0100667475195399,-0.01947326935597754,-0.01881568662090745,0.03637358698883228, 0.03522610167448665,‐ 0.06790360849857948,-0.06642083738702515,0.1264574463559693, 0。 1290835712181074,‐ 0.2329246261335595,‐ 0.2822118708112642,04006808254673663, 0.893162856314243}; gSequence=new Sequence(-25,doubleToVectoKgSeq));

double hseq[]= {0.001356564701415186,‐

0.005426258805660745,0.005605084248642842,

0.004710957033732356, -0.0091147451381518,-0.00880083983869757,0.01702802946613788,0.01644094468650876, ‐ 0.03181181131835634,‐ 0.03070970087148118,0.05943338839037274,0.05733095225431275, ‐ 0.1110584407108168,‐ 0.1067758033726191,0.2076908383800496,0.1967942773044705, ‐ 0.3897455807998404,Ю .3457708907750407,0.7420976984779873,04684225966331863, ‐ 1調 5394519892303〕 hSequence=new Sequence(‐ 25,doubleToVectonseqp); ;

double sknots□

=(0,0.1666666666666666, scdingAtKnots = new Sequence(O, doubleToVector(sknots));

double ipSeq[] = {-0.00239233,0.0OE9283, -0.033321, 0.lA:355, -0.464101, 1.732O51; interpolationSeq4 = new Sequence(-7, doubleToVecto(ipSeq));

I

早稲 田大学渡辺仁史研 究室 1996年 度修 士論文


群集波動 シミュ レー タ

46

Vector doubleToVecod&uble[ elem) { Voclor ouput = new Vectodelem.length + 2 - 1rt fo(int i = Q i < elem.lcngth; { output.addElemen(new DoubHelem[i] ));

ift)

l

fo(int i = elern.length -2;i>= 0; i-)

{

output.addElffren(new Doubldelern[i] ));

l

renrn output;

l )

早稲 田大学渡辺仁史研究室

19%年 度修士論文


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.