Upload
hitoshi-watanabe
View
228
Download
6
Embed Size (px)
DESCRIPTION
1996年度,修士論文,樋口智幸
Citation preview
群集波動シミュレータ
Pedestrian¨Wave Simulator
1996年度 修士論文別冊
渡辺仁史研究室
樋口智幸
群集波動シミュレータ
■概要
本プログラムは以下のパ ッケージから成 る。
O modelS:駅 構内モデルの作成・描画・管理。
O gm:シ ミュレーションを実行する。
OwaVdet:ウ ェーヴレットを用いた時間周波―
を行 う。
クラス構成上重要な部分を以下に説明する。
■全体の構成
SelfFrarne
アプリケーション動作
メニュー、描百領域
ModelManager sirnu ator
オブジェクトの作成・管理 シミュレーションを実行
Bout S
移動経 路
Model〔Ob iect〕
Routesイ ンスタンスは、経路 とな
シミュレーシヨンに必要な情報は
由して各 Moddに与えられる。
駅歩行空間の一部分
RoOm PlotFrame
群集密度信号を
有する場結果表示
ModelManagerか らの情報 に
基づいて、Simulatorは群集の
移動経路 となる Routesク ラ
スを自動的にインスタンス化
する。
る一連のModdを保持する。
、Simulatorか らRoutesを 経
早稲田大学渡辺仁史研究室 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 0ff‐screenctwice血3Size of tt window)and‖ hand tool"(to mOVe tte screenp applied.中 96.12.28 Layers applied.■ 97.14 "Open"and"Save"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 pomtint嵌 ,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
hage ors; 〃off_screen
private int aciveLayer=1; //dle number of acive layerCraphics grt
ObiPalette op; //Obi∝ tS palette(t001S)
public Serrame lm; //parent ialneboolean 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;〕
//1中■●Medlods中 十■十
〃*十ウhitialize十中*
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黎〈).widぬノ2;iy=‐siza).height/2;
破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€lhasSelected = 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;)
if(keY:1Q;1openPlot0;renrrn true;l
〃"delete"key is pressed.
ll"enter" key is uessed.
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ
if ((key >=100+) && (key <= 1fi)7D {boolean boo = tnre;for (int i = 0; i < modelAnay.size0; i++){
if (geMode(i).nudge(e, key)) {repain();boo = false;break;l
)if (boo) [
if (key: 1m4 && activelayer != 2) {setActiveLayer(+ractivelayer);I else if (key == l(X)5 && activelayer != 0) {setActivelaye( - activelayer) ;)
)refirn true;l //Arrow keys
if (keY == {J; 1
if (+rscale > 20) scale = 2O;setScale(scale);return true;| il'-"
if(keY:{l) (
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:6 = getModel(i);)
lif (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:return new Aisle(this, x, y, width, height);
case l:return new Stairs(this, x, y, width, height);
case2zreturn 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);
defaulureturn 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--);)
Irepaint0;)
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) {
ix - (px - x); iy -= (py - y);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;)
ib. setActivelayer(a) ;
clearSqeen0;)
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 = yiix = -size0.width I 2; iy = -sizeo.heuht / 2;if (scale: 20) {
scrX = sizeO.wid0r * 10; rcrY = sizeOJreight * 10;
lclearScreen0;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);)
lif (offs != 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 樋 口 智幸 :HIGUCⅢ TOMOYUKItr'<<HISTORY>>* 96.6.29The class "Aisle","Stairs" and "Square" are added.r' 95.6.30The pa.rent class "Model Manager' has the integrared off-screen image,'r which each class has had.* 96.8.28Now the class "Gate" has been added.* 96.12.30 Class "Pladorm" ant "Outside" are added.* 95.12.31 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 oldWndal,。 ldHeuヒ 〃旧大きさ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;
int px,py;
int oldPx,oldPy;
int clickX,dickY;
int widdl,height;
private int layerNum;static int ID;int id;public String ram€ ='"'Sequerre densitySignal;
〃オブジエク トの始点のxy座標〃旧座標〃マウスダウンの座標〃大 きさ
〃所属するレイヤーの番号
〃群集密度信号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(.yiMAXWIDTH = 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) {if (!(samelayerNum(m.getl,ayerNum0) ii m.saneLayerNum(this.getlayerNum0))) return new Rectangle
(0,0,0,0);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 = nameiif (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;
〕
rr・・・ sinuladons■ ●●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■ scale);
boolcan top=oく py+4'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く minw)wid■ =ninЧ亀r Kheightく minH)height=ninH;ilf(Widm>maxwn wid■ =maxW;r(hei♪t>maXH)heittt=maxH; 〃大きさ制限〕
public V∝tor containedModeお ooolean aag){Vector result=new Vecto<ゝfOr(int i=o;iく mm.getMode― y()。SiZa);‖十){
Model m=nun.geModel(i);if(m!=thiS&&(aag==isSatneSor〈 m)))(
r(血s.getRectい ).htersects(m.getRect(血 S)))〔
result.addElement(m);
}
)
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 -= dif (key : 10Cl/) px += d;if (lcheckJoinedQ) {
addAreaO;l
return true;l
u
!
蒻m“
ヽ′
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ
/rt,十 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∝〈).u五〇n(getOldR∝t()光
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‐ 1);
〕elSe〔
g.setCo10Kし 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(洸
〕
19
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ
package models;
import java.awl*;import java.util.Vector;import waveletSequence;import waveletPlotFrame;
ll***t* suB classes ***,**//**** class iRoomn ***'rpublic abstract class Room exbnds Model { llRoom 2 7 7
public Room(ModeManager mm, int px, int py, int width, int height, Rectangle minmax) {super(mm, px, py, width,height, mfumax);)
//*** Metllods 'l*'rboolean 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;
Ibreak;
case l: case 3:if (!(px <= m.pX && px + width >= m.px + m.width && (m instanceof Stairs ii (getRect0
.intersection(m.getRect0)).height <= 5))) {return true;l
)return false;
l
boolean isSameSort(Model m) {return m instqrceof Room;)
public Sequence setDensity(Sequence seq, Model m) {soq = s€q.sequenceMulti((double)m.open0 / touch(m));if (densitySignal == null) {
densitySignal = seq;
) else {densitySignal = densitySignal.sequenceAdd(seq);)
Systern.out.println(toSuing0 + " : " + densitySigral.length$ + " : " + densitySignal);return seq;
)
public void showPlot0 {if (densitySignal != null) {
PlotFrarne pf = new PlotFrame(densitySignal, range);
Pf.show0;)
ll
20
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレ…タ
package models;
import java.awt*;import javautil.Vector;import j ava.util.Enumeration;irnport waveletSequence;
ll***** suB classes *****//***{. clrss sFiltern ****
public abstract class Filter extends Model I tpitter ? 2 7Doors doors[];int doorNum;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;)
break;case l: 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
boolean isSameSort(Model m) {return m instanceof Filter;l
F** Values are se,nt by Plaform.sendGenerator0*l
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; llmeterent=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
)
●ι
l皿m“
l′
早稲田大学渡辺仁史研究室 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 {returnlI
)
早稲田大学渡辺仁史研究室 1"6年度修士論文
群集波動シミュレータ
package models:
importjava.aw七 十;
mport waveleL中 ;
//1*摯*class"Aisle"****
public class Aisle extends Filter〔 〃通路クラスstatic halint MINWIDⅢ =18,MINHEIGⅢ =18;static halint MA漱 MDⅢ =Integer.MAX VALUE,MAXHEICr=htegerMAX VALUE;private static double coe■ ]=new dOuble14];
public Aislく MOdelManager mm,int px,int py,int widdl,ht height){
¨ ,pX,py'Widul,height,new R∝ 蜘喝lec― DTH,MB田国ЮⅢ ,M… ,MAXHEIGHDンCOefIOl=0;COef11]=-0.521: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衛
〕
//t十■sinulations ⅢⅢ+
public Sequence setDensity(Sα pence seq,Model m){SysLm.out.pman("calculating… :"+toStFing());
Sequence c□ =new sequence[5];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();
) //dCOmpOSefOr(int i=4;i>=1;i―‐
)〔
dli]=d[i].SequenceMuldtta■ .pow((double)leng血 o,COef11-1]));CIi‐ 1]=C[i]ごα∝)nSmct(d[il);
} //MOnstructCIO].Shiftc(hⅨ cdOublolengu10′ 10〉C[0]=C10].SCalingSampleo);
renmcIO];
)
〕
23
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ
package models;
importjava.awLtimportjava■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血 ‐2;i+=8){
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));
24
早稲田大学渡辺仁史研究室 1996年度修士論丈
群集波動シミュレータ
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);
Ig.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 ? I : -l) * i + 2) | 2;inty11 ={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)
lif (scale > 4) retum;
g.setColor(Color.darkGray) ;Jwitch(rotate) { I XePffits
case0: {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:
25
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ 26
case 3:〔
g.drawLheccentersx,sy,centerSx,sy+sHcight‐ 1);
ntX□ ={蜘terSX-2,centerSx,centerSx+2,centerSx‐ 2};
int y[]={Sy+SHeight‐ 3,sy+sHcight‐ 1,sy ttHeight-3,sy+sHelght‐ 3);
g.drawPoly30n(x,y,4);
〕) 〃階段描画
〕
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Ы eンn.tOuch(■五S)ノ open());
C[Ol血副ht賀Юlation(ゝ
dOuble∞ etint 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();
) //deCOmpOsefOr(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]);
) //reCOnsmctC[Ol.Shiftc(inth((dOuЫ Olenguloノ V));
CIO]=C[0].SCalingSttΨleo);
rem C10];
〕)
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ
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 (scale <= 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);
))
brealqcase 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
II
27
break;
l
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ
l
publicintgeGateNumQ {r€htrn (rctate (6 ). - 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 **'fpublic Sequence setDensity(Sequence seq, Model m) {
System.out.println("Calculating... : " + toString0);Sequerrce c[] = new Sequencel4];Sequence d[] = new Sequence[4];c[0] = seq.sequenceMulti((double)m.touch(t]ris) / openO);c [0].fi ndlnterpolation0 ;
for (int i = l; i <= 3; i+r) {c[i] = s1i - ll.decomposeToScalingO;d[i] = s1i - ll.decomposeToWavelet0;) //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]);l //reconstruct
c[0].shif(1);c[0] = c[0].scalingSample(0);retum c[0];)
)
23
28);
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ
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(〉
〕)
29
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ
package models;
irnport java.awt*;irnport java.util.Vector;import java.util. SaingTokenizer;import j ava.util. Enumeration;import j ava.util. Hashable;import java.util.Date;import sim.*;importwavelet*;
//*'l** class 'Pladrormn *'l'r*publicclass Pfatform extendsGenerator I ll /7 v F^-LD A
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;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
lsuper.drawObject(g);)
public String toString0 {Suing s = ":";s r- diagramPath l.toStringO;s {- '," + arrivall + ",";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, ",");if (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;
))
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 = (rotate 16 ). -- 0 ? px : py);) else {pl = (a + Integer.parselntfteys.elementAt(i - I ).toStringO)) / 2;)
if (i : (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,public class Outside exbnds Generator I ll #fll I Z
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:tpublic Sequence getArriva(Date start, Date end, Model m) {
vector vec = new Vectoro;Double d = new Double((double)anival /(1.4 * touch(m) / 28 * 10)); lllAmlsecfor (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年度修士論文
群集波動シミュレータ 34
// class Simulator 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 RunnablefModeManagermm;Vector routes = new Vectorolpublic 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 GeneratorsimDialog.showQ;)
private void findRoutesO {routes -renroveAllElemens(Xfor (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 1
Model m = mm.getModel(i);if (m instanceof Pladorm) {
Plaform p = (Pladorm)m;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 SimDialogfor (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 { //calculationuY{
thread.sleep(2fiX));I carch(IntemrptedException e) {)
for (Enumeration e = routes.elementsQ; e.hasMoreElemensO;) {Routes 1 = (Routes)(e.nextElement0);r.doCalc(start, end);
Iif(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; i+r) {
result r- i + " : " + enextElement0.toStringo +'Yn";)
return rcsulq)
I
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ 36
l***** Soquerrce class (for Wavelet calculation)** t996.4.2l-5.t7r, 1995.11.21-11.28
* Each'Sequence" has 2 elernents. The form ofdata is [Index, Body].'t 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.*lstatic protected Sequence pSequence;
F** The two-scale sequence of the mother wavelel*l
static protected Sequence qSequence;
l+** The decomposition sequence which is a LFF, of 0re mother function.*l
static protected Sequence gSequence;l*** The decomposition sequence which is a HPF, of the mo0rer function.*lstatic protected Sequence hSequence;l*** The values od the scaling fimction at integer knots.*l
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), i - this.first0);this.removeElementAt( I );this.addElement(last) ;
)
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" elements form position "from".*l
Sequence take(Sequence seq, int 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"*lpublic double ercrgy0 {
double sum = 0;for (Enumeration e = (this.las$).elementsO; e.hasMoreElementsO;) {
sum += Math.pow(objToDouble(e.nextElernen0), 2);)
return sum;
l
/f* Sequence manipulations **r** 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");
Ireturn new Sequence(seq.first0 * 2, uttp);l
l*** Gives the downsampled sequence of the original data*l
Sequence downSample(Sequence seq) {Vector last = seq.lastO;if (seq.first0 4o 2 == I ) last.removeElementA(0);if (last.size0 Eo 2: l) last.addElement("0");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年度修士論文
群集波動シミュレータ 39
F* 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 Vector.*l
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 *=mitemp.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 + l);for (int id); i < sup.sizeQ - fl + l; ir-r) {
Vector part = new Vector(fl);for (int j=0; j < fl; j++) {
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 - j - l));double d = objToDouble(elem.elementA());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 function expansion coefficients which interpolates the data*l
public synchronized void findlnterpolation0 {Sequence se9 = listConvolve(interpolationSeq4, this);this.removeAllElements0;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 j) [Sequerrce onp = this'Sequence tmp2;for (int i = 0; i < j; i+r) {
tmp2 = listConvolve(pSequence, upSample(tnp));UnP = tmP2;l
renun listconvolve(scalingAtKnots, tmp);)
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ
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 of one less resolution levelI 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
41
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ 42
r・*
+
*
摯 spline4 chss(fOr Wavelet calculation)十
* 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 1.0,1996rH28+@au■Or 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"拠 tance,which data is interpolated.●/
public SPline4(V∝ tor dat→ {
SupeKO,data);
mdlnterp01ation();
〕
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
m“
ヽ′
早稲田大学渡辺仁史研究室 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 B-splines. (for the purpose of future extension)*l
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, tnp4);
qSequence = 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年度修士論文
群集波動シミュレータ
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 trfter) {Vectorbinom = new Vector(m + 1);int mul = multi(2*m -1);for (int k d); k <= m; kr-r)
{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)teuler.addElement (new Double(d));l
Sequerre trlis = new Sequence(nOrder, truncatedEuler(lis, tOrder));
gSequence = listConvolv{listConvolve(new Sequence(-m, binom), new Sequence(l - m, euler)), upSample(trlis));
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))ltmp4.eddElement("" + d);)
Sequence trnp3 = new Sequence(l - 2 * m, tmp4);hSequence = lisConvolve(tnp3, upSample(ulis));)
44
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ
〃十■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));
double qseq□ ={0.m00248015873015873,-0.∞ 3075396825396825,0.“ 15922619“ 7619,-0.196031746031746,04583829365079365,‐ 0.6017857142857143);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
45
早稲田大学渡辺仁史研究室 1996年度修士論文
群集波動シミュレータ 46
Vector doubleToVecod&uble[ elem) {Voclor ouput = new Vectodelem.length + 2 - 1rtfo(int i = Q i < elem.lcngth; ift) {
output.addElemen(new DoubHelem[i] ));l
fo(int i = elern.length -2;i>= 0; i-) {output.addElffren(new Doubldelern[i] ));l
renrn output;l
)
早稲田大学渡辺仁史研究室 19%年度修士論文