Você está na página 1de 121

國 立 成 功 大 學

工 業 設 計 研 究 所

碩 士 論 文

虛擬實境對自行車人體動作實驗影響之研究
The Virtual Reality Applicate Problems and Motion Sickness in
Human Motion Analysis of Bicycle

研 究 生:吳信典

指導教授:陳建旭

中 華 民 國 八 十 八 年 六 月
中文摘要

本研究主要探討虛擬實境在自行車人體動作分析使用上可行性
之問題。由人因設計為出發點來探討此論點,探討虛擬世界和真實世
界間的關係﹔在實驗過程中,受測者會在真實世界及虛擬世界中騎乘
自行車,於實驗室中的虛擬世界騎乘自行車之時,受測者將會頭戴「頭
盔顯示器」來模擬真實世界中所看到的事物,受測者在接受測試的同
時,我們將以攝影機來記錄受測者騎乘的動態姿勢,在整個實驗過程
中,改變場景顯像方式,來比較受測者在虛擬世界和真實世界中的反
應,藉由 T 檢定以及 One-Way ANOVA 來比較虛擬實境與真實世界中之
不同的運動分析數據,以獲得虛擬實境與現實世界的差異點;最後,
探討在實驗過程中,虛擬實境技術對於人因設計的影響,並討論虛擬
實境應用是否會帶來不良的副作用以及對受測者產生不適應感。
英文摘要

Keywords:
Virtual Reality、Virtual World、Reality World、Human Factors Design、Bicycle、
Human Postures、Ergonomics、Human Factor、Motion Analysis System、
Human Performance。

In this research, we will focus on virtual reality applicate problems in human


motion analysis of bicycle. From the design of human factor design, we discuss the
relation between virtual and real world by using man-machine system. The subjects
will to ride the bicycle on the experiment platform of bicycle under the virtual world
and ride through in real world. Under the virtual world, the subjects have
helmet-mounted display (HMD) to simulate the real world. At that moment, we use
the videotape to record the dynamic postures of subjects. During the experiments, we
could control the methods of scene rendering. Compared the different motion data
from virtual world and real world, we may derived the guidelines for people to design
the virtual world from the human factor considerations to close with the real world
what helpful for applied in safety design of bicycle. We discussion what will VR
casuse motion sickness, headache, pain or discomfort under vibration condition.
,
1995

(Head Mounted Display; HMD) (Data Gloves)

HMD
1.2

HMD
1.3

3D

110 ( )
21 100
1.4
pdf ps (PostScript )
Html 1999
pdf 216
( VR 500 1993-1999 )
pdf
Adobe Arcobat Exchange 3.0 300dpi
pdf ps Adobe Arcobat Distillr 3.0 pdf
PDF Writter pdf

5 (Human
Factors) 14 (Computer Graphices) 9
28
HCI(107 )
Motion Analysis(12 ) VR for Face Application(5 ) Virtual Actors(14
) VR (10 ) Virtual Enviroments(6 ) Stereo
Display(7 ) (10 ) 171 WTK
(3 ) (14 )
HCI VR HCI
107 Stanford 86 Cambridge 6
Delaware 6 Maryland HCI 4
HCI 5 HCI

HMD 3 HMD 1
HUD
4 6
2 1
2
18 ( 9%)
198 ( 91%)

1997 1999
80 1999
HCI

2.1

2.1.1
( 1989)

2.1.2
(Wood worth)

5
15 20

55
70 94
(Stereo Scope)
(Stereo
Scope)

(Double Image)

Virtual I.O INC. Virtual


I.Glasses

(HUD) 30
90 0.7
180,000 640 480
60MHZ 8
226.7

2.1.3
( )

(1)
(2)

(3)
2.2

2.2.1

(1)

(2)
(3)

2.2.2
(1)
( )

(2)

(3)
(4)

(5)

(6)

(7)

1950 ( )
1990
(1)
Sense8
World Tool Kit NT Release 7
wtkgui40.lib wtkgui42.lib.
800 Wtk.pdf

World Tool Kit (Geometric-Base)

CAD
Curves-Base

Curves-Base

Microstation Geometric-Base

Geometric-Base

(x, y, z)

( Z
1 Scaling Matrix )
Geometric-Base
( )
Geometric-Base 3D Studio
Max Maya VRML
Geometric-Base WTK

CAD Model Geometric

LoadObject (szFileName);
WTuniverse_go();

WTK C

(2)
Image-Base
24Bits
Bytes Image-Base

Vector
Graphic
CPU Raster
Graphics Raster Graphics

MS-DOS
Windows GDI
Graphics Device Interface
API
Direct-X

2.2.4

HCI Fish(1990) Walker(l990)


HMD
Wells(1992)

(Translator)
(Image Generators) (Display)
2.2.5
(1) VRML

MUD Multiple User Dimension


BBS Dragon

MUD Telnet

Windows Game
VRML VRML
JAVA
3D Avatar

Chat Room IRC RPG


VRML 2.0 Node
OZ Interactive OZ Virtual Sony
Community Place Browser
Chaco Communication
MUD Pueblo
MUD

Living World Open Community

(2)Quick Time VR
Apple Computer
15 24

A. (Panoramas)

QTVR
360 3D

B. (Objects)
QTVR

.. .

2.3
2.3.1

(Toronto) ETC(Ergonomics in Teleoperation and Con-


trol Laboratory)

(
VTC-Internet.mpg vcontrol.mpg)

2.3.2
Geneva
NVE(Networked Virtual Environments)
NVE VLNET(Virtual Life Network Systems)
(Magnetic)
HMD 247*230 57600 NTSC

SGI Onyx2
Onyx(ATM )
ATM
ATM

2.3.3

Hull
(Virtual Enviroment Knee arthroscopy Training
System; VE-KATS)
(Electromagnetic Tracker)
( vekats.mpg)

(HUD)

2.3.4
Kansas

:Wings Virtual I/O I-


Glasses

(http://ukanaix.cc.ukans.edu/~mreaney )
2.4

2.4.1 HMD
HMD (Accommodation)

California 1997
HMD
97 Teleoperators
& Virtual Environments Strickland Dorothy Chartier Dan
(Electroencephalogram; EEG) HMD

1995 Michigan Central Florida


(CREOL) HMD
(See-Through) HMD
HMD CCD HMD

2.4.2
(Georgia Institute of Technology) 1998
IEEE Computer Graphices and Applications
David Brogan Ronald
Metoyer Georgia Jessica Hodgins
(dbrogan@cc.gatech.edu)
SGI Power challenge 16 195-MHz
R10000 A 200-MHz,
R4400 SGI Indy Motorola 68332
HMD
vitrual I/O I-Glasses Poly-
gon-Base B-Spline (NURBS)
26,000
16 300

12 (Segment)
17

Olympic

2.4.3
VLNET

2D
Geneva MIRALab 1998
CCD 3D
360 Geneva MIRALab
Morph

Bradford Geneva Swiss


Federal Motion control of Virtual Humans
Pure Avatars
(Sensor) Guided Actors
IK(Inverse
Kinematics) Autonomous
Actors Model-Based
Interactive-Perceptive Actors Model-
Based

2.5

2.5.1

(Scapula) (Clavicle)
(umerus) (Radius) (Ulna)

27
(1) (ElbowJoint)

(2) (Hand Joint)


3. (Shoulder Joint) (Ball and Socket Joint)

(4) (Trunk Joint)

(Contraction)
(1)
(2)

(l) (Handle force)

(2) (Saddle force)

(3) (Peddle force)

(Femur) (Tibia)
(Fibula)
(Patella) (Quadricep Femoris Muscle)
(Tarsal) (Metatarsal)
(Phalanges)

95 140

2.5.2

(Magnetic)
(Optical)

(Transmitter)
(Receiver)
(Small Reflective Markers)

20 30
100
240 Hz
100
140 Hz

100 500

(7DOF)
Keio (http://www.aist.go.jp ) Yamazaki
(mmochimaru@nibh.go.jp)

CCD

16
2D 2D

Balearic Islands (http://


iris1.uib.es)
Yamazaki
3D
3D
2.6

VLNET
SGI Onyx2
ATM

3D CCD
2D
HMD I-Glasses HMD

HMD

VE(Virtual Environments) Virtual


Actors
(Motion Analysis and Range of Motion in Virtual Environments)
( )http://www. apple.com
HMD

Quick BASIC Turbo C Vi-


sual BASIC Visual C MS-DOS
NT

6
10
( )

3D Studio MAX
WTK NT
Rendering
2Gbytes
4
3.1

QB C
3.1.1
12Bits A/D
8255 IC QB OUT ( C
outportb) INP (C inportb) &H280

ADDR = &H280
( 280 ADDR)
U3PORTA = ADDR+8
( U3PORTA ADDR 8)
U3OPRTB = ADDR+9
( U3PORTB ADDR 9)
U3OPRTC = ADDR+A
( U3PORTC ADDR 10)
U3CTL = ADDR+B
( U3CTL ADDR 11)
U3MODE = &H9B
( U3MODE 9B)
OUT U3CTL, U3MODE
( U3MODE U3CTL
)
ADLB = INP(U3PORTA)
( U3PORTA Low Bits)
ADHB = INP(U3PORTB)
( U3PORTB High Bits)
AD = (ADHB AND &HF)*256 + ADLB
( High Bits Low Bits AD)
V! = ( 5/4096) * AD
( )

1/1000 1/10
[ : : . ][ ]…

1/10

3.1.2
sAD
outportb inportb 0x2E0
16bits 0 65534

1600

(Timer)

#define base 0x2E0


( 2E0)
#define pa 0x0
( Port A 0)
#define pb 0x1
( Port B 1)
#define pc 0x2
( Port C 2)
outportb(base+pc,0x00);
outportb(base+pc,0x80);
( )
outportb(base+pc,0x40);
( Port A )
oa=inportb(base+pa);
( Port A )
outportb(base+pc,0xA0);
( Port B )
ob=inportb(base+pa);
( Port B )
my_count=256*oa+ob;
(Port A High Bits Port B Low Bits High Bits
Low Bits my_count )
COM1

COM PORT
COM
init_com()
{
outport(0x03fb,0x80);
( COM1)
outport(0x03f8,0x30); /* 115200/2400 = 30h Low bits */
outport(0x03f9,0x00); /*High bits*/
( 2400bits)
outport(0x03fb,0x03);
outport(0x03f9,0x0b);
outport(0x03fc,0x0b); /* Trans Ready */
( COM PORT )
}
COM PORT
send_char(char c)
{
while(!(inport(0x3fd) & 0x20));
( Buffer )
outport(0x03f8,c);
Bytes Buffer Byte
COM PORT
3.1.3

EPROM RS-
232

10

-128 128

timer0 = clock();
now_timer = (double)((timer0 - start_timer) / CLOCKS_PER_SEC);
raw = (WTglove5DT_rawdata *)WTsensor_getrawdata(iglasses);
WTmessage(“%5.1f,%6d,%6d,%6d,%6d,%6d,%6d,%6d\n”,
now_timer,
raw->bPitch,
raw->bRoll,
raw->bFinger[0],
raw->bFinger[1],
raw->bFinger[2],
raw->bFinger[3],
raw->bFinger[4]
);
STDOUT

hand.exe
C:\WTK> hand > file1.txt
file1.txt
COM PORT
C:\WTK>hand > COM1:

STDOUT
OS 1/10

3.1.4
Geometric-Base Visual C 5.0
WTK C 3D
WTK OPEN GL
WTK
ELSA Asia GLoria-XL L
PC-based 3D True
Color 1920 x 1080 (pixels) local
buffer Windows NT(r)
OpenGL(r), HEIDI
Direct3D GLINT MX (3Dlabs) 3D
GLINT Delta (3Dlabs) 2D Trio64V2/
DX 1 MB DRAM (S3) 40Mbytes
Image-Base Visual BASIC 5.0
HMD

Double Buffer
24
Pentium II-350
128Mbytes SDRAM

3.2
170
160 0.9
HMD 1 3

10 Simon(1976)
(Human Factors) 50%
9 25% 9 11

300

10
HMD

3.2
4.0
Visual Studio Visual BASIC

MS-DOS Borland Turbo C


QuickBASIC

Hi-8

3.2.1
3.2.2 :
I-Glasses(HMD)
Data Gloves(5DT)

HI-8
V3, ENG
3.2.3

RGB

Active-X

Visual BASIC 5.0

Visual C Point
?
Hi-8

5, 10, 15, 24, 30, 60, 120

Microsoft Access
(x,y,z)

100
32 8 100
(x, y) MyPoint(x).Sx
MyPoint(x).Sy MyPoint(x).E1, MyPoint(x)
.E2, MyPoint(x).E3 MyPoint(x).E4

MyPoint(x).Sx, MyPoint(x).Sy, MyPoint


(MyPoint(x).E1).Sx, MyPoint(MyPoint(x).E1).Sy, MyPoint (MyPoint(x) .
E2) .Sx MyPoint(MyPoint(x).E2).Sy

(Range of Motion)
cR = &HFF And cP
cG = (&H100FF00 And cP) / &H100
cB = (&HFF0000 And cP) / &H10000
3Bytes(24Bits)
(cP)
RGB VisualBASIC 00FF00
FF00 cP AND 1Byte
100FF00

cP = (cR - (cG + cB) \ 2) * (cR * (RedRange / 10)_


/ TheRedValue) * RedRange / 10
CP

3.2.4

3D Studio
MAX True-Space 4.0

WTK Ulead
Media Studio 5.0
3.3

HMD

WTK
Render Video

HMD

14
( )

3.4

100
10:00 11:00 24

3.5
(Independent Variable)
(Dependent Variable)
(Secondary Extraneous Or Irrelevant Variables)
(Dependent Variable)
(Independent Variable) William H Cushman
1989
(Product Variables)

(Task Variables)

(Environmental Variables)

(User Variables Subject Variables)

3.5.1
1.
2.
3.5.3
175 160
0.9

3.5.4

3.6

3.6.1
RS232
1/1000 1/10

(Overlay)
(
) ( ) ( )
(X Y Z )
1/10
3

HMD

320*240*16Bits
15 RGB
AVI
(6Gbytes)
(7Mbytes) (3Mbytes) (3Mbytes)
3.6.2

3.6.2

WTK Render Video


4.1
10
175 160
0.9

100 1
2/3

HMD
100
HMD
WTK Geometric-Base

HMD

AD
( )
1/10 486
RS-232
HMD

4.2

V3

HMD
HMD
HMD HMD

HMD
HMD

HMD

WTK

100 100

WTK
Image-Base Rendering
HMD

10Gbytes
Hi-8

4.3
Gemetric-Base

Image-Base

Gemetric-Base

5
1

5.1
Geometric-Base

HMD
30 94
30 94

10:00
11:00 1024*768
Hi-8
Video AVI
WTK
3D
3D

5.2

WTK

Adobe Photoshop 4.0


HMD

5.3
3D 3D Studio MAX
2D CAD
2D
2D 3D Studio MAX
BOX
24,560 3D

(Omni Light) 10:00~11:00

3DS Optimum
IPAS

BOX

3DS

5.4 WorldToolKit
HMD
COM1 COM2 WTK
Sensor Sensor

WTK
Frame rate 50 Frames
Visual C
(5.6 )

5.5 Render Video


WTK Render Video Image-Base

Render Video
Render 3D Ray-
Tracing 30 Frames Video
VidoeTape
5.6
3D WTK
Visual C
5.6.1
(Head Files) windows.
h winuser.h time.h stdio.h

#include <windows.h>
#include <winuser.h>
#include <time.h>
#include <stdio.h>
WTK Head File
wt.h winbase.h
#include “wt.h”
wt.h WTK I-Glasses
Bird Glove5DT… wt.h WTK

WTK
void Actions (void);
Actions WTK
3D
void LoadObject (char *filename);
void setup_viewpoint(void);
WTK
Actions LoadObject setup_viewpoint
Wtviewpoint
WTK MyViewPoint
Myp
WTviewpoint *MyViewPoint;
WTp3 MyP;
HMD
WTsensor *mouse; /* The Mouse */
WTsensor *iglasses; /* The HMD */
viewlink HMD View Point
WTmotionlink *viewlink;
root
WTnode *root, *mnode = NULL;
I-Glasses
WTiglasses_rawdata *raw;
WTK

long display_config = WTDISPLAY_DEFAULT;

void SetupWindow (void);


void LoadObjectDialog (HWND hWnd);

void SetBgcolorDialog (HWND hWnd);

/* initial view position, stored so we can reset viewpoint */


WTpq initial_pq = {
{ 8195.0f, -1615.0f, 705.0f },
{ 0.1027f, 0.0321f, 0.0078f, 0.9942f }
};
5.6.2

/*
* Main program function
*/
int main ()
{
int i;
i
WTnode *light;

WTp3 lightdir;

3D 3

Wtuniverse_new WTK
WTuniverse_new (display_config, WTWINDOW_DEFAULT);
root = WTuniverse_getrootnodes();
root
SetupWindow ();

mouse = WTmouse_new ();

iglasses = WTiglasses_new(SERIAL2);
HMD WTK HMD COM2 (SERIAL2)
HMD
if (!mouse) WTerror (“Couldn’t find mouse\n”);
HMD

/* create a dircted light */


lightdir[X] = 0.0f; lightdir[Y] = 0.0f;lightdir[Z] = 1.0f;
90
light = WTlightnode_newdirected(root);

WTlightnode_setdirection( light, lightdir );


WTK
LoadObject( “Exam03n.3ds”);

WTwindow_setbgrgb (WTuniverse_getcurrwindow(), 254, 254, 255);


}
MyViewPoint = WTuniverse_getviewpoints();

WTuniverse_setactions (Actions);
WTK Actions
WTkeyboard_open ();

WTuniverse_ready ();

setup_viewpoint();

WTuniverse_go ();

WTuniverse_delete ();

Windows
return 0;
} /* END main */

Actions
5.6.3
void Actions (void)
{
WTpq pq;
pq WTpq
char *MyClipBuf;
Clipboard WTK COM
PORT
Clipboard RS-232

int key;
float tx;
tx
int go_x;
X
int go_y;
Y
int go_z;
Z
int go_value;

har tbuffer[9];
clipboard
WTviewpoint *vpoint = WTuniverse_getviewpoints();

go_value = 0;

go_x = 0;
x
go_y = 0;
y
go_z = 0;
z
/* get key presses, if any */
key = WTkeyboard_getlastkey ();
if (key)
switch (key) {
case ‘1’:go_x = 10;break;
case ‘2’:go_x = -10;break;
case ‘3’:go_y = 10;break;
case ‘4’:go_y = -10;break;
case ‘5’:go_z = 10;break;
case ‘6’:go_z = -10;break;
}
1-6
10
if (ShowInfo) {
COM PORT

/* DataSize = WTserial_ntoread(MySerial);
COM PORT
if (DataSize > 0) {
COM PORT

WTserial_read(MySerial, MyClipBuf, DataSize, 0);

WTmessage(MyClipBuf);
}
else {
strcpy(MyClipBuf,”None”);
} */
COM PORT

raw = (WTiglasses_rawdata *) WTsensor_getrawdata (iglasses);


WTp3_print (raw->e,”Raw euler:”);
HMD X, Y, Z
if (OpenClipboard(hWnd) != 0) {
Clipboard
MyClipBuf = GetClipboardData(CF_TEXT);
Clipboard
CloseClipboard();
Clipboard
go_value = atoi(MyClipBuf);
go_value

Clipboard

_strtime(tbuffer);

WTviewpoint_getposition(MyViewPoint, pq.p);

WTviewpoint_getorientation(MyViewPoint, pq.q);

tx = pq.p[X];
tx += go_x;
pq.p[X] = tx;
x
tx = pq.p[Y];
tx += go_y;
pq.p[Y] = tx;
y
tx = pq.p[Z];
tx += go_z + go_value;
pq.p[Z] = tx;
z

if(pq.p[Z] > 2850) pq.p[Z] = -1036.827f;

WTviewpoint_moveto(MyViewPoint, &pq);

printf(Info, “px=%8.3f, py=%8.3f, pz=%8.3f, “, pq.p[X], pq.p[Y], pq.p


[]);
WTmessage(“%s, pz=%8.3f, “, tbuffer, pq.p[Z]);

/*sprintf (Info, “Model: %s Polygons: %d FPS: %f %s”,


WTgeometry_getname(WTnode_getgeometry(mnode)),
WTnode_numpolys(mnode),
WTuniverse_framerate(),
MyClipBuf
); */

/* END Actions */
5.6.4

void LoadObject (char *filename)


{
if (!filename)
return;
if (mnode) {
WTuniverse_deletelink(mouse,mnode);
WTuniverse_deletelink(iglasses,mnode);//add
WTnode_delete (mnode);
}

mnode = WTmovnode_load (root, filename, 1.0f);

if (!mnode) return;

if (GetMenuState (hMenu, ID_SETTINGS_BOUNDINGBOX,


MF_BYCOMMAND) == MF_UNCHECKED)
WTnode_boundingbox (mnode, FALSE);
else
Tnode_boundingbox (mnode, TRUE);
Bound Box Bound Box

/* Move the viewpoint to the position read from the model. */


WTuniverse_getinitialview(&pq);
WTviewpoint_moveto (WTuniverse_getviewpoints (), &pq);
/* Zoom the viewpoint out until the whole model is visible */
WTwindow_zoomviewpoint(WTuniverse_getwindows());
HMD

/* Attach the sensor to the object. */


if (mnode) {
WTmotionlink *mlink;
mlink = WTmotionlink_new(mouse, mnode, WTSOURCE_SENSOR,
WTTARGET_MOVABLE);
WTmotionlink_setreferenceframe(mlink, WTFRAME_VPOINT,
WTuniverse_getviewpoints());
}

View Point
(WTFRAME_VPOINT)

WTsensor_setsensitivity (mouse, 0.01f*WTnode_getradius (mnode));


WTK 0.01f
0.01 f Flot

/* END LoadObject */

LRESULT CALLBACK myWndProc (HWND hWnd, UINT uMsg,


WPARAM wParam, LPARAM lParam)

switch (uMsg) {
case WM_COMMAND:
switch (wParam) {
case ID_FILEOPEN:
LoadObjectDialog (hWnd);
break;
case ID_FILE_RESET:
setup_viewpoint();
WTmouse_trackballreset (mouse);
WTmouse_trackballreset (iglasses);
break;
case ID_FILE_DISPLAYINFO:
if (GetMenuState (hMenu, ID_FILE_DISPLAYINFO,
MF_BYCOMMAND) == MF_UNCHECKED) {
CheckMenuItem (hMenu, ID_FILE_DISPLAYINFO, MF_CHECKED);
ShowInfo = TRUE;
}
else {
CheckMenuItem (hMenu, ID_FILE_DISPLAYINFO,
MF_UNCHECKED);
SetWindowText (hWnd, “WorldToolKit”);
ShowInfo = FALSE;
}
break;

case ID_FILE_ABOUT:
MessageBox (hWnd, AboutThisApp, “ Beta”, MB_OK);
break;
case ID_FILEEXIT:
WTuniverse_stop ();
break;
case ID_RESET_STATE:
LoadObject( “face.3ds”);
break;

break;
default:
return CallWindowProc (orgWndProc, hWnd, uMsg, wParam, lParam);
}
} /* END myWndProc */
WTK
void SetupWindow (void)
{
/* get a handle to the WTK window */
hWnd = (HWND)WTwindow_getidx (WTuniverse_getcurrwindow ());
if (!hWnd) return;
/* set background color to black */
WTwindow_setbgrgb (WTuniverse_getcurrwindow(), 0, 0, 0);
/* set WndProc for window */
orgWndProc = (WNDPROC) SetWindowLong (hWnd,
GWL_WNDPROC, (LONG)myWndProc);
/* load the menu from resource */
hMenu = LoadMenu (NULL, MAKEINTRESOURCE(IDR_MENU1));

if (!hMenu) return;
/* attach the menu to the window */
SetMenu (hWnd, hMenu);
} /* END SetupWindow */

1 6

5.6.5
WTK 3D Studio MAX WTK

void setup_viewpoint()
{
float radius;
WTpqpq;
radius = WTnode_getradius(WTuniverse_getrootnodes());
WTmessage(“ n”);

WTviewpoint_getposition(MyViewPoint, pq.p);
WTviewpoint_getorientation(MyViewPoint, pq.q);
pq.p[X] = -6.157f;
pq.p[Y] = -160.854f;
pq.p[Z] = -1036.827f;

WTviewpoint_moveto(MyViewPoint, &pq);

WTviewpoint_addsensor(MyViewPoint, iglasses);
I-Glasses

WTK Actions

WTK
AVI
AVI BMP

1024*768
VHS 320*240

1,00,000 ( 55
)

6.1
Point_Struct Join_Struct

Private Type Point_Struct


Sx As Integer
Sy As Integer
End Type
Point_Struct Sx Sy
X,Y
Private Type Join_Struct
p1 As Integer
p2 As Integer
p3 As Integer
End Type
Join_Struct p1 p2 p3
Point_Struct X,Y
Dim Frames(50) As Point_Struct
10
50
Dim ScanRanges(50) As Point_Struct
50

Dim MyJoin(50) As Join_Struct


6
50
Dim TempJoin As Join_Struct

Dim Now_Index As Integer

Dim Now_Position_Pic As String

Dim Now_Position_Index As String

Dim Painted As Integer

Dim Number_Step As Integer

Dim OldX As Integer


Dim OldY As Integer
OldX OldY X,Y
Dim MoveX As Integer
Dim MoveY As Integer
MoveX MoveY X,Y
Dim HitX As Integer
Dim HitY As Integer

Dim Now_Index_Filename As String


BMP
Dim VisibleMinValue As Long
Dim VisibleMaxValue As Long

Dim StepValue As Integer

Const SRCCOPY = &HCC0020


Const SRCERASE = &H440328
Const SRCINVERT = &H660046
Const SRCAND = &H8800C6
Copy Erase Invert AND
Dim StartMarker As Integer

Dim StartX1 As Integer


Dim StartY1 As Integer
Dim StartX2 As Integer
Dim StartY2 As Integer

Dim OldXr As Integer


Dim OldYr As Integer
Dim OldXp As Integer
Dim OldYp As Integer

Dim ZoomTimes As Integer


Dim RedRange As Long

Dim Now_Range_Index As Integer

Dim SystemBusy As Integer

34

6.2

Sub AutoScanMakerbyRed()

Dim cP As Long
Dim cR As Long
Dim cG As Long
Dim cB As Long
RGB
Dim pS As Integer
Dim pY As Integer
Dim pX As Integer
Dim oX As Integer
Dim oY As Integer

Dim tR As Integer
Dim nP As Integer
Dim nX As Integer
Dim nY As Integer
Dim TheRedValue As Integer

Dim AntiCollisionRange As Integer

TheRedValue = RedValue.Value

tR = RangeScale.Value

Picture1.DrawWidth = 1

AntiCollisionRange = AntiCollision.Value

Now_Index = 0

For pS = 0 To ScanRangeList.ListCount - 1
S$ = ScanRangeList.List(pS)
StartX1 StartY1
StartX2 StartY2
StartX1 = Val(Left(S$, InStr(S$, “,”) - 1)) - tR
StartY1 = Val(Mid(S$, InStr(S$, “,”) + 1)) - tR
StartX2 = StartX1 + tR * 2
StartY2 = StartY1 + tR * 2
oX = 0
oY = 0
nP = 0
For pY = StartY1 To StartY2
For pX = StartX1 To StartX2
cP = Picture1.Point(pX, pY)

cR = &HFF And cP
cG = (&H100FF00 And cP) / &H100
cB = (&HFF0000 And cP) / &H10000
RGB
cP = (cR - (cG + cB) \ 2) * (cR * (RedRange / 10) /
TheRedValue) * RedRange / 10
R cP
If cP < 0 Then cP = 0
If cP > 255 Then cP = 255

If cP > nP Then
nP = cP
nX = pX
nY = pY
End If
DoEvents
Next
Next
If nX < oX + AntiCollisionRange And nX > oX - AntiCollisionRange
And nY < oY + AntiCollisionRange And nY > oY - AntiCollisionRange Then
‘Beep

Else
Frames(Now_Index).Sx = nX
Frames(Now_Index).Sy = nY
Picture1.Circle (nX, nY), Val(MaskSize.Text), RGB(255, 0, 0)
DoEvents
Now_Index = Now_Index + 1
oX = nX
oY = nY
Frames
End If
Next

End Sub

If cP > nP Then
nP = cP
nX = pX
nY = pY
End If
6.3
10,000

Sub AutoScanNextStep()

Dim pS As Integer
Dim pY As Integer
Dim pX As Integer
Dim oX As Integer
Dim oY As Integer

Dim ASR As Integer


Dim S$

If SystemBusy = False Then

ASR = AutoSnapRed.Value

SystemBusy = True

For pS = 0 To ScanRangeList.ListCount – 1
S$ = ScanRangeList.List(pS)
pX = Val(Left(S$, InStr(S$, “,”) - 1))
pY = Val(Mid(S$, InStr(S$, “,”) + 1))
Now_Range_Index = pS

Call AutoSnapRedHits(pX, pY)


Next
SystemBusy = False
AutoSnapRed.Value = ASR
End If

End Sub

6.4

Click AutoSnap
6.3

Sub AutoSnapRedHits(x, y)
6.2
Dim cP As Long
Dim cR As Long
Dim cG As Long
Dim cB As Long
Dim pS As Integer
Dim pY As Integer
Dim pX As Integer
Dim tR As Integer
Dim nP As Integer
Dim TheRedValue As Integer
Dim S$
TheRedValue = RedValue.Value
tR = RangeScale.Value

nP = 0
cP = 0
HitX = LastX
HitY = LastY
For pY= y - tR To y + tR
For pX = x - tR To x + tR
cP = Picture1.Point(pX, pY)
cR = &HFF And cP
cG = (&H100FF00 And cP) / &H100
cB = (&HFF0000 And cP) / &H10000
cP = (cR - (cG + cB) \ 2) * (cR * (RedRange / 10) / TheRedValue) *
RedRange / 10
If cP < 0 Then cP = 0
If cP > 255 Then cP = 255
If cP >= nP Then
nP = cP
HitX = pX
HitY = pY
End If
6.2
DoEvents
Next
Next
End Sub

6.5

X Y

-1
Function CheckMaskXY(x, y) As Integer

Sub CopyScanRange2MaskPoint()

Sub DrawMaskRange()

Sub DrawScanRange()

Sub LoadNote()

Sub LoadScanRange()

Sub Paint_A_Point(x, y)

Sub RecData2Disk()
6.6
X1
Y1 X2 Y2 Xo Yo
Function Request_Angle(x1 As Integer, y1 As Integer, x2 As Integer, y2
As Integer, oX As Integer, oY As Integer) As Single

Dim Sum1 As Single


Dim Sum2 As Single
Dim Cosine As Single
Dim T2 As Single
Dim T As Single
Dim Sita As Single
Dim z1 As Integer
Dim z2 As Integer
Dim px1 As Long
Dim py1 As Long
Dim px2 As Long
Dim py2 As Long

px1 = x1 - oX
py1 = y1 - oY
px2 = x2 - oX
py2 = y2 – oY
Z 3D
2D Z 0
z1 = 0
z2 = 0
Sum1 = px1 * px2 + py1 * py2 + z1 * z2
Sum2 = ((px1 * px1 + py1 * py1 + z1 * z1) ^ 0.5) * ((px2 * px2 + py2 *
py2 + z2 * z2) ^ 0.5)

On Error Resume Next:


Cosine = Sum1 / Sum2
T2 = -Cosine * Cosine + 1
If Sqr(T2) = 0 Then
180
Request_Angle = 180
Else
T = -Cosine / Sqr(T2)
Sita = Atn(T) + 2 * Atn(1)

Request_Angle = Sita * 180 / 3.1415926


End If
End Function

6.7


0_1_2, 1_2_3, 0_1_4, 1_4_5, 4_5_6, 5_6_7,
128.8236, 143.9065, 173.2186, 64.63668, 71.41814, 80.37185,
128.8236, 143.9065, 173.2186, 66.07007, 78.13425, 81.37873,
110.5425, 149.2426, 174.1325, 63.43495, 77.8894, 85.65457,
110.908, 143.5541, 169.6051, 75.6031, 91.7733, 78.98289,
0_1_2 0 1 2
analysis.exe

Excel SPSS
Excel
Excel SPSS

7.1
7.2
10
T T

7.2.1
(1) T

H0 U<=U0
H1 U>U0
t=3 df=9
HMD

HMD

HMD
SPSS

V001 HMD

(2)
X Y 74 5402

SPSS
V001 V002 X Y
7.2.2
WTK, RENDER VIDEO
VR (
) (WTK t=2.250 Render t=2.333 Video t=2.
090)

One-Sample Test

Test Value = 3
90% Confidence
Interval of the
Sig. Mean Difference
t df (2-tailed) Difference Lower Upper
1 2.250 9 .051 .6000 .1112 1.0888
2 2.333 9 .045 .7000 .1501 1.2499
3 2.090 9 .066 .7000 8.6E-02 1.3141

HMD
HMD ( t=2.714 t=0.00 t=-1.
616)

One-Sample Test

Test Value = 3
90% Confidence
Interval of the
Sig. Mean Difference
t df (2-tailed) Difference Lower Upper
2.714 9 .024 .6000 .1947 1.0053
.000 9 1.000 .0000 -.6110 .6110
-1.616 9 .140 -.6000 -1.2804 8.0E-02
WTK WTK
(t=1.5)

One-Sample Test

Test Value = 3
90% Confidence
Interval of the
Sig. Mean Difference
t df (2-tailed) Difference Lower Upper
1 1.500 9 .168 .4000 -9.E-02 .8888

RENDERING
( t=1.861 t=2.236)

One-Sample Test

Test Value = 3
90% Confidence
Interval of the
Sig. Mean Difference
t df (2-tailed) Difference Lower Upper
2 1.861 9 .096 .5000 7.4E-03 .9926
2 2.236 9 .052 .5000 9.0E-02 .9099

VIDEO
( t=2.058 t=1.861
t=1.627)

One-Sample Test

Test Value = 3
90% Confidence
Interval of the
Sig. Mean Difference
t df (2-tailed) Difference Lower Upper
3 2.058 9 .070 .8000 8.7E-02 1.5126
3 1.861 9 .096 .5000 7.4E-03 .9926
3 1.627 9 .138 .5000 -6.E-02 1.0633
WTK
:1. (0.846) 2. (
-0.821) 3. ( -0.672)

Correlations

1 1 1 1
Pearson 1 1.000 .846** -.821** -.672*
Correlation 1 .846** 1.000 -.668* -.624
1 -.821** -.668* 1.000 .787**
1 -.672* -.624 .787** 1.000
Sig. 1 . .002 .004 .033
(2-tailed) 1 .002 . .035 .054
1 .004 .035 . .007
1 .033 .054 .007 .
N 1 10 10 10 10
1 10 10 10 10
1 10 10 10 10
1 10 10 10 10
**. Correlation is significant at the 0.01 level (2-tailed).
*. Correlation is significant at the 0.05 level (2-tailed).

1. ( -0.668) 2.
(0.864) 3. ( -0.647)
(-0.782)

Correlations

1 1 1 1
Pearson 1 1.000 -.668* .846** -.647*
Correlation 1 -.668* 1.000 -.821** .190
1 .846** -.821** 1.000 -.354
1 -.647* .190 -.354 1.000
Sig. 1 . .035 .002 .043
(2-tailed) 1 .035 . .004 .598
1 .002 .004 . .315
1 .043 .598 .315 .
N 1 10 10 10 10
1 10 10 10 10
1 10 10 10 10
1 10 10 10 10
*. Correlation is significant at the 0.05 level (2-tailed).
**. Correlation is significant at the 0.01 level (2-tailed).
(0.650)
RENDERING (0.
677) (0.692) (-0.773)

Correlations

2 2
Pearson 2 1.000 .677*
Correlation 2 .677* 1.000
Sig. 2 . .032
(2-tailed) 2 .032 .
N 2 10 10
2 10 10
*. Correlation is significant at the 0.05 level
(2-tailed).

Correlations

2 2 2
Pearson 2 1.000 .692* -.720*
Correlation 2 .692* 1.000 -.373
2 -.720* -.373 1.000
Sig. 2 . .027 .019
(2-tailed) 2 .027 . .289
2 .019 .289 .
N 2 10 10 10
2 10 10 10
2 10 10 10
*. Correlation is significant at the 0.05 level (2-tailed).

VIDEO
RENDERING (0.684)
(-0.642)
(0.652) (0.666)
VR

VR
RENDERING
7.3
7.3.1
Paired Sample T-Test HMD
One-Way ANOVA

Paired Sample T-Test SPSS

One-Way ANOVA SPSS

7.3.2
Paired Sample T-Test HMD
(t=-5.45~-2.793 P=0~0.021)
( HMD
HMD WTK HMD Render HMD Video ) One-
Way ANOVA

HMD (F=4.57~9.968
P=0.005~0.046)
HMD(F=4.874~16.645
P=0.001~0.040) HMD Video(F=5.388~4.740 P=0.032~0.043)
HMD WTK(F=4.448~6.6 P=0.19~0.49)
Paired Samples Test

Paired Differences
95% Confidence
Interval of the
Std. Std. Error Difference Sig.
Mean Deviation Mean Lower Upper t df (2-tailed)
Pair 1 OSPINE1
- -7.4294 8.4127 2.6603 -13.4474 -1.4113 -2.793 9 .021
NSPINE1

Paired Samples Test

Paired Differences
95% Confidence
Interval of the
Std. Std. Error Di fference Sig.
Mean Deviation Mean Lower Upper t df (2-tailed)
Pair 1 OSPINE2
- -11.0783 6.4237 2.0313 -15.6736 -6.4831 -5.454 9 .000
NSPINE2

Paired Samples Test

Paired Differences
95% Confidence
Interval of the
Std. Std. Error Difference Sig.
Mean Deviation Mean Lower Upper t df (2-tailed)
Pair 1 OSPINE3
- -12.5184 11.0212 3.4852 -20.4025 -4.6343 -3.592 9 .006
NSPINE3

Paired Samples Test

Paired Differences
95% Confidence
Interval of the
Std. Std. Error Difference Sig.
Mean Deviation Mean Lower Upper t df (2-tailed)
Pair 1 OSPINE4
- -12.0039 12.3621 3.9092 -20.8472 -3.1606 -3.071 9 .013
NSPINE4

HMD
(109.27 ) (94.12 )
HMD(173.55 ) HMD Video(169.69 )
HMD WTK(168.23 ) (162.
80 ) HMD
HMD Render
(167.50 )
HMD

HMD
(R=0.839~0.986)
HMD
(R=-0.305) HMD
(R=-1.01~0.228)
8.1
WTK Render Video WTK Geomet-
ric-Base Render Video Image-Base

HMD
HMD

HMD Render

WTK 3D

(Motion Sickness)

WTK
WTK Image-Base

Image-Base
Image-Base Video

Render
Render

VR

VR

HMD

HMD
Render

Image-Base Render
Image-Base Video WTK
HMD HMD
Video

HMD

(Accommodation) HUD HMD


8.2

2D
3D

HMD 640*480
HMD

Video Morph

Hybrid Render Geometric-


Base
Computer Graphices Image Processing

Você também pode gostar