Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - ZippyDee

Pages: 1 [2] 3 4
16
Miscellaneous / Baryshnikov and Nureyev
« on: July 11, 2011, 07:53:52 am »
As you may or may not know, I am quite involved in dance. I recently received a full scholarship to a ballet studio, and I am taking full advantage of that, dancing at least 10 hours a week there, and at least 4 hours a week at another studio as well.

Anyway, being that I am so engaged in ballet lately, I have been watching videos of Mikhail Baryshnikov and Rudolph Nureyev, quite possibly the two best male ballet dancers (ballerinos) in the history of forever.

Rudolph Nureyev dancing Corsaire with Margot Fonteyne (who is also amazing):


Mikhail Baryshnikov also dancing Corsaire (though he does only the male variation, a.k.a. the male solo):



Obviously on a personal level I am floored by these performances, as was the rest of the classical ballet community. Nobody had ever seen anything like either of these men. It really helps to know what exactly it is that you're looking at, and to have some understanding of how the moves are executed, so being an actual dancer helps, but they're still pretty amazing to watch. I mean, seriously...HOW THE HELL DOES ANYONE EVER JUMP AS HIGH AS NUREYEV?? (see around 3:20 or so) And those incredible turns in both performances...how do you ever keep your balance like that? It's like they're all superhuman!

Oh well...I am aware that many of you may not appreciate this nearly as much as I, but I wish to expand the world's view of dance, especially the concept and acceptance of male dancers. These men were phenomenal, the best there ever was. I hope you can at least appreciate these a little bit.

17
OmnomIRC Development / PM's disappear
« on: July 11, 2011, 02:31:26 am »
When you get a query in Omnom it displays the message in the current window with (PM) next to the name. It also opens up a new query window in the channel bar...But the query window seems to not log any messages. If switch channels and then switch back, all queries are lost forever in the dark abyss that is deleted data. :'(

18
General Discussion / My Letter to Hip-Hop --- by Bridget Gray
« on: July 10, 2011, 04:21:52 am »
If this is the wrong section, please move it, but I feel this is music-related enough.

I feel very strongly about so-called "Hip-Hop" music these days. I feel this poem by Bridget Gray says it very well. Any other opinions about this?





EDIT: She uses the N-word in this poem. Just letting you know ahead of time in case you might be offended by it.

19
OmnomIRC Development / [Bug report] Scrolling channels
« on: July 05, 2011, 05:23:44 am »
you can scroll to the right indefinitely......then it takes that same indefinite amount of time to scroll the channels back to their original positions. I learned that the hard way.

20
TI Z80 / zIDE: Another On-Calc Assembly Environment
« on: July 03, 2011, 10:28:26 pm »
Okay, so I've been working on this for a while now, and I'm pretty happy with how some of my routines are turning out so far. I haven't gotten very far, and I'm still only working on the very basics of it right now, but here's basically what I'm thinking about:


zIDE was inspired by Deep Thought's XDE, but this will be for on-calc Assembly programming. If it ever gets done, here's what I'm planning for it to have:
  • Custom text editor
  • 4-level grayscale syntax highlighting
  • Line numbering
  • Line auto-indenting
  • Jump to label / Jump to line
  • Relative label support
  • On-Calc Compiling with fairly descriptive errors (as much as possible, at least)
  • Running
  • #include support (hopefully)
  • Saving as a program that can be edited in the normal OS editor
  • Back-up to AppVar
   Note: If #include support ends up working, I will make the ti83plus.inc file a separate file so the app doesn't take up a huge amount of pages. However, the ti83plus.inc file will definitely not be the complete file. I will try to include as much of the basic things as I can, but I doubt it will include things like the two-byte key codes (of which there are A LOT).

Honestly I'm not sure how many pages this app will end up being, but it shouldn't be more than two...Hopefully I can get it all into one page.

So, that's what I'm planning. We'll see how much I can actually get to, seeing as I'm basically learning ASM as I go with this thing. I already feel like this has been such a great learning experience!

Right now I'm working on the text input, so nothing stated above is absolutely positively for certain going to happen, but that also means that it can change and be added to! Any suggestions are welcome (in fact, I'd LOVE suggestions to make it even better).

ALSO, I will be asking a lot of questions, and probably have a lot of routines that I'll screw up little things in (or maybe big things) that might need some debugging, so any and all assistance is also welcomed with open arms.

I may have a screenshot pretty soon, but that's all for now!

21
Miscellaneous / Attractive Names
« on: July 02, 2011, 09:36:42 pm »
What are the most attractive boys'/girls' names you can think of?

22
ASM / Rectangle Drawing Routines
« on: July 02, 2011, 12:51:48 am »
I have a program that uses two buffers and it toggles which buffer it's writing to using a flag. Because it uses that flag I figured it would be a good idea to utilize that for drawing routines so they can draw to whichever buffer it's currently set to instead of having to have separate routines for each buffer.

While writing those routines, I came up with this set of rectangle drawing routines that I think are pretty good, though they probably could be optimized quite a bit.

Anyway, I thought I'd share them:

Code: [Select]
;;---------------------
;; Rect Off/On/Inv
;;---------------------
RectOff:
;;Clears a rectangle on the buffer
;;IN:
;; D contains x
;; E contains width
;; H contains y
;; L contains height
;;DESTROYS: All, OP1, 1st byte of OP2
call GetRectLine
ld a, 12
sub c
ld e, a
ld d, 0
_rOffLoop1:
push de
ld de, OP1
push bc
ld b, c
_rOffLoop2:
ld a, (de)
cpl
and (hl)
ld (hl), a
inc hl
inc de
djnz _rOffLoop2
pop bc
pop de
add hl, de
djnz _rOffLoop1
ret

RectOn:
;;Draws a rectangle on the buffer
;;IN:
;; D contains x
;; E contains width
;; H contains y
;; L contains height
;;DESTROYS: All, OP1, 1st byte of OP2
call GetRectLine
ld a, 12
sub c
ld e, a
ld d, 0
_rOnLoop1:
push de
ld de, OP1
push bc
ld b, c
_rOnLoop2:
ld a, (de)
or (hl)
ld (hl), a
inc hl
inc de
djnz _rOnLoop2
pop bc
pop de
add hl, de
djnz _rOnLoop1
ret


RectInv:
;;Inverts a rectangle on the buffer
;;IN:
;; D contains x
;; E contains width
;; H contains y
;; L contains height
;;DESTROYS: All, OP1, 1st byte of OP2
call GetRectLine
ld a, 12
sub c
ld e, a
ld d, 0
_rInvLoop1:
push de
ld de, OP1
push bc
ld b, c
_rInvLoop2:
ld a, (de)
xor (hl)
ld (hl), a
inc hl
inc de
djnz _rInvLoop2
pop bc
pop de
add hl, de
djnz _rInvLoop1
ret


GetRectLine:
;;IN:
;; D contains x
;; E contains width
;; H contains y
;; L contains height
;;OUT:
;; HL points to first byte of rectangle in buffer
;; B contains rows
;; C contains columns
;; OP1 [and possibly first byte of OP2] contains mask data for the line
xor a
or l
ret z ;return if height is zero
ld a, d
add a, e
cp d
ret z ;return if the width is zero
cp 96
jr c, _grl_widthOK ;if width is > 90
ld a, 96
_grl_widthOK:
dec a
ld e, a
call RectLineToOP1
;c contains width in bytes
;b contains first column
ld a, h
add a, l
add a, -64
jr nc, _grl_heightOK
neg
add a, l
ld l, a
_grl_heightOK:
ld a, l ;store height in a
ld l, h
ld h, 0
ld d, h
ld e, l
add hl, hl
add hl, de
add hl, hl
add hl, hl
ld e, b
add hl, de
; This next line gets the current buffer address into DE.
; Obviously zBufMode is the buffer flag in zModeFlags, and backBuffer holds the address of my backBuffer.
; Note that it uses $+# format because I use it normally in a #define. I've just written it out here for you to see.
bit zBufMode, (iy+zModeFlags) \ jr z, $+7 \ ld de, plotSScreen \ jr $+5 \ ld de, backBuffer
add hl, de ;hl points to first byte of rect in buffer
ld b, a ;b contains height, c contains width
ret


RectLineToOP1:
;;IN:
;; D contains starting x
;; E contains ending x
;;OUT:
;; C contains length of line
;; B contains starting x byte
;; OP1 [and possibly 1st byte of OP2] contains mask data for the line
;;DESTROYS: All except HL
ld a, e
cp d
ld b, 0
ret z
srl a
srl a
srl a
ld c, d
srl c
srl c
srl c
ld b, c
sub c ;a contains num bytes spanned minus 1
ld c, a
push bc
push hl
ld hl, OP1
;get mask
ld a, d
and 7
ld b, a
ld a, $FF
jr z, _skipmask
_maskloop:
sla a
djnz _maskloop
_skipmask:
ld b, c
ld c, a
xor a
or b
jr z, _lastbyte
ld a, c
_hloop:
ld (hl), a
inc hl
ld a, $FF
djnz _hloop
ld c, a
_lastbyte:
ld a, e
cpl
and 7
ld b, a
ld a, $FF
jr z, _skipmask2
_maskloop2:
add a, a
djnz _maskloop2
_skipmask2:
and c
ld (hl), a
pop hl
pop bc
inc c
ret

Honestly I'm not sure that these routines are even the best way to do it, but I feel they're pretty good. If anyone has better routines that I could swap these for, then I'd love to see them!


EDIT: Thanks to Calc84maniac, the bugs have been fixed and it now works properly!  ;D

23
Math and Science / Intersection of a moving point and a moving line
« on: May 26, 2011, 03:17:10 am »
Hey, I'm working on a program that requires me to calculate the intersection of a moving point and a moving line. The point (and each endpoint of the line) has a known x, y, x-velocity, and y-velocity. I am aware that I'll need to integrate this, but I'm not sure how to go about writing that equation in such a way that I can use it in my program. (Speed and size of the resulting equations when translated into code are both obsolete, so don't worry about 'optimizing' calculations.)

Let's assume that an intersection DOES exist between the current point/line locations and the point/line locations after translation from velocity.

Basically, the way I see it I can either integrate between the starting and ending locations of the points and solve for the intersection, or I can have my program just step through and interpolate when it sees that the point has crossed to the other side of the line.

Either way, I'm not sure exactly how to go about writing equations for either method.

Thanks in advance for any help!

24
ASM / How are apps different?
« on: May 19, 2011, 03:48:03 pm »
If I wanted to write an app instead of just a normal program, what would I have to do differently? More simply: How different is it from writing a program?

25
ASM / Why won't you worrrrrrk??? [Floodfill routine]
« on: May 11, 2011, 08:14:39 am »
So, I've been working on this floodfill routine that uses zero stack, and I've finally finished it........or so I thought. It seems to not be working. It just freezes the calc. When I go to debug in wabbitemu it seems to be frozen at $0CAF, on the line jp $0B65

Here's my hopefully-not-too-hard-to-read code:
Code: [Select]
#include ti83plus.inc
#define ProgStart $9D95
#define BUFF1 plotSScreen ; Location of drawing buffer 1
#define BUFF2 0 ; Location of drawing buffer 2 (for grayscale implementation)
.org ProgStart-2
.db $BB, $6D

InitTestData:
;; INIT DATA FOR TESTING
ld hl, 1
push hl
ld hl, 20
push hl

PROGRAM_START:
;; L contains the fill color
;; stack:
;; [0]: y-coordinate
;; [1]: x-coordinate


; Get the fill color and save it to (color)
ld a, l
ld (color), a

; Calculate the byte address for the pixel
;   and save it to (addr)
pop hl
ld a, 64
cp l
ret c
ld d, 0
ld e, l
add hl, hl
add hl, de
add hl, hl
add hl, hl
pop de
ld a, 96
cp e
ret c
ld d, 0
srl e
srl e
srl e
ld a, e
ld (xbyte), a ;save the byte column to (xbyte)
add hl, de
ld (addr), hl

; Calculate the bitmask for the pixel
;   and save it to (mask)
and 7
ld b, a
ld a, $80
jr z, ___skiploop
___loop:
rrca
djnz ___loop
___skiploop:
ld (mask), a

; make sure the starting color is not the fill color
ld de, BUFF1
add hl, de
and (hl)
cp 0
jr z, ___zero
ld a, 1
___zero:
ld (icolor), a
ld b, a
ld a, (color)
cp b
ret z ; return if the starting point is the fill color
call TurnByRule
Loop:
call GetBoundsPainted
ld a, b
cp 1
jp nz, _1bound
cp 2
jp nz, _2bounds
cp 3
jp nz, _3bounds
cp 4
jp nz, _4bounds
_0bounds:
call Paint
jp EndLoop
_4bounds:
call Paint
ret
_3bounds:
call GetAddr_Mask
or (hl)
ld (hl), a
;remove the mark, and reset rule and findpassage to defaults
xor a
ld (m_mask),a
ld (bool), a
ld a, $0F
jp EndLoop
_2bounds:
; jesus, this one will be tough...
ld a, (m_mask)
cp 0
jr nz, ___skip_place_mark
ld a, (bool)
and 1
cp 0
jr nz, ___skip_place_mark
ld (findpassage), a
ld a, (mask)
ld (m_mask), a
ld hl, (addr)
ld (m_addr), hl
ld a, (dir)
ld (m_dir), a
___skip_place_mark:
call MoveByRule
ld a, (m_mask)
cp 0
jr nz, ___null_mark
ld b, a
ld a, (mask)
cp b
jp nz, Loop
ld hl, (m_addr)
ld a, h
ld b, l
ld hl, (addr)
cp h
jp nz, Loop
ld a, b
cp l
jp nz, Loop
ld a, (dir)
ld b, a
ld a, (m_dir)
cp b
jr z, ___null_mark
ld (dir), a
ld a, (bool)
xor 1
ld (bool), a
xor a
ld (findpassage), a
___null_mark:
xor a
ld (m_mask), a
ld a, (bool)
and 1
cp 0
call nz, Paint
jp Loop
_1bound:
ld a, (bool)
and 1
jr z, __1bound_else
ld a, 1
ld (findpassage), a
jr EndLoop
__1bound_else:
; get opposite corners...
; if both are open
ld a, (dir)
dec a
push af
___find_bound:
pop af
inc a
push af
call GetPixelInDir
ld b, a
ld a, (icolor)
cp b
jr z, ___find_bound
pop af
inc a
inc a
call GetDirOffset
push af
push de
ex de, hl
dec a
call GetDirOffset
ld a, h
or d
ld d, a
ld a, l
or e
ld e, a
call GetPixel
ld b, a
ld a, (icolor)
cp b
pop hl
pop af
jr nz, EndLoop
inc a
call GetDirOffset
ld a, h
or d
ld d, a
ld a, l
or e
ld e, a
call GetPixel
ld b, a
ld a, (icolor)
cp b
call z, Paint
EndLoop:
call MoveByRule
jp Loop


Paint:
;; Paints the current pixel the fill color
ld a, (color)
cp 0
jr z, __paint_off
call GetAddr_Mask
or (hl)
ld (hl), a
bcall(_GRBufCpy) ; just for testing purposes.
ret
__paint_off:
call GetAddr_Mask
xor $FF
and (hl)
ld (hl), a
bcall(_GRBufCpy) ; again just for testing purposes.
ret


MoveByRule:
;; Move to next location based on rule
;; OUT:
;; B is 0 if no tile was found to move to. Otherwise, non-zero.
call GetCurPixel
ld b, a
ld a, (icolor)
cp b
jr nz, ___move_dir ; if the current pixel is filled, just move foward
ld a, (dir)
call GetPixelInDir
ld b, a
ld a, (icolor)
cp b
jr nz, ___no_move ; if the pixel at dir is filled, don't move
; check the corner between the pixel at dir and the pixel to the side specified by rule
; if the pixel is on, just move forward
; otherwise move to that pixel
ld a, (bool)
and 1
ld c, a
ld a, (dir)
call GetDirOffset
push de
inc a
sub c
sub c
call GetDirOffset
pop hl
push af
ld a, h
or d
ld d, a
ld a, l
or e
ld e, a
push de
call GetPixel
ld b, a
ld a, (icolor)
cp b
pop de
pop af
jr nz, ___move_dir
push af
call GetPixelAddr
ld (mask), a
ld a, d
ld (xbyte), a
ld (addr), hl
pop af
ld (dir), a
call TurnByRule
ld b, 1
ret
___move_dir:
ld a, (dir)
call GetDirOffset
call GetPixelAddr
ld (mask), a
ld a, d
ld (xbyte), a
ld (addr), hl
ld a, (bool)
and 1
ld b, a
ld a, (dir)
inc a
sub b
sub b
call remap_dir
ld (dir), a
call TurnByRule
ld b, 1
ret
___no_move:
ld b, 0
ret


TurnByRule:
;; OUT:
;; B is 0 if no tile was found to turn to. Otherwise non-zero.
ld b, 4
___turn_loop:
push bc
ld a, (dir)
call GetPixelInDir
;if pixel is on, dec
ld b, a
ld a, (icolor)
cp b
jr z, __chk_side_turn
ld a, (bool)
and 1
ld b, a
ld a, (dir)
dec a
add a, b
add a, b
call remap_dir
ld (dir), a
pop bc
djnz ___turn_loop
ret
__chk_side_turn:
ld a, (bool)
and 1
ld b, a
ld a, (dir)
inc a
sub b
sub b
call remap_dir
push af
call GetPixelInDir
ld b, a
ld a, (icolor)
cp b
pop af
pop bc
ret nz
ld (dir), a
djnz ___turn_loop
ret


remap_dir:
;; Maps the value in A to the range of 0 <= A < 4
cp 4
ret nc
cp 128
jr c, ___add
sub 4
jr remap_dir
___add:
add a, 4
jr remap_dir


GetDirOffset:
;; IN:
;; A contains the direction
call remap_dir
ld b, a
xor a
cp b
jr z, __dir_right
inc a
cp b
jr z, __dir_down
inc a
cp b
jr z, __dir_left
__dir_up:
ld a, b
ld de, $0100
ret
__dir_right:
ld a, b
ld de, $0001
ret
__dir_down:
ld a, b
ld de, $FF00
ret
__dir_left:
ld a, b
ld de, $00FF
ret


GetPixelInDir:
;; IN:
;; A contains the direction
call GetDirOffset
jp GetPixel


GetAddr_Mask:
;; OUT:
;; HL contains the addr of the pixel
;; A contains the mask of the pixel
ld hl, (addr)
ld de, BUFF1
add hl, de
ld a, (mask)
ret


GetBoundsPainted:
;; OUT:
;; B contains the number of painted boundaries
;; bits 0-3 of C contain which bounds are painted (0:right,1:left,2:top,3:bottom)
ld bc, 0
push bc
ld de, $0001
call GetPixel
ld b, a
ld a, (icolor)
cp b
jr nz, $+9
pop bc
inc b
ld a, 1
or c
ld c, a
push bc
ld de, $00FF
call GetPixel
ld b, a
ld a, (icolor)
cp b
jr nz, $+9
pop bc
inc b
ld a, 2
or c
ld c, a
push bc
ld de, $0100
call GetPixel
ld b, a
ld a, (icolor)
cp b
jr nz, $+9
pop bc
inc b
ld a, 4
or c
ld c, a
push bc
ld de, $FF00
call GetPixel
ld b, a
ld a, (icolor)
cp b
pop bc
ret nz
inc b
ld a, 8
or c
ld c, a
ret


GetCurPixel:
;; OUT:
;; A contains the color of the current pixel
ld hl, (addr)
ld de, BUFF1
add hl, de
ld a, (mask)
and (hl)
cp 0
ret z
ld a, 1
ret


GetPixelAddr:
;; IN:
;; D contains y offset
;; E contains x offset
;; OUT:
;; HL contains the addr of the pixel
;; A contains the mask for the pixel, or 0 if the pixel is off screen
;; D contains the xbyte for the pixel
ld hl, (addr)
__x_offset:
ld a, (mask)
ld b, e
ld e, a
ld a, b
cp 0
jr z, __y_offset
cp 1
ld a, (xbyte)
jr z, __shiftRight
rlc e
jr nc, __chk_side
dec a
jr __chk_side
__shiftRight:
rrc e
jr nc, __chk_side
inc a
__chk_side:
cp 12
jr c, __edgeaddr
__y_offset:
push af
ld a, d
cp 0
jr z, __return_addr
cp 1
jr z, __shiftUp
ld bc, -24
add hl, bc
jr __chk_top
__shiftUp:
ld bc, 12
add hl, bc
__chk_top:
push hl
ld bc, -768
add hl, bc
jr c, __edgeaddr
__return_addr:
pop hl
ld a, e
pop de
ret
__edgeaddr:
ld a, 0
ret


GetPixel:
;; IN:
;; D contains y offset
;; E contains x offset
;; OUT:
;; A contains the color of the pixel (1 or 0)
call GetPixelAddr
cp 0
jr z, __edgepxl
__getpxl:
ld de, BUFF1
add hl, de
and (hl)
ret
__edgepxl:
ld a, (color) ; pixel is off-screen, so return (color)
ret


addr: ; Initial address (no buffer address added) of the byte containing the current pixel (Y*12+X/8)
.dw 0
mask: ; Bitmask for the current pixel
.db 0
xbyte: ; The byte column containing the pixel (basically X/8)
.db 0
dir:
.db 0

m_addr:
.dw 0
m_mask:
.db 0 ;0 means no mark
m_xbyte:
.db 0
m_dir:
.db 0

bool: ; bit 0=rule ;;;;;I dunno why but I had this and findpassage as the same thing before. I still haven't taken all the "and 1" lines out from when I was testing rule...
.db 0
findpassage:
.db 0
color: ; The fill color (currently 0 or 1. If I implement grayscale it will be 0-3)
.db 1
icolor:
.db 0 ; The color of the starting fill point

.end

I wouldn't be surprised if it's something reeeeeally stupid. I'm new to ASM, so I'm sure I made multiple mistakes.

26
Music Showcase / Nothing At All
« on: May 10, 2011, 04:59:27 pm »
Here's a song that I wrote with my friend. I wrote the words and we collaborated on the music, but he's a better guitarist, so this is him in the recording. I'm a better singer but we live two states away, so this is all him.

http://soupinabox.com/nothingatall.mp3

27
Miscellaneous / Indifference to Death...
« on: May 09, 2011, 07:07:12 pm »
My grandmother died this morning around 9:45. We knew it was coming, as she'd been getting weaker and weaker by the day, and could no longer even swallow food on her own. Two days ago she stopped being able to breathe without assistance. My mom and her brother decided it was time to just stop the assisted oxygen and let her pass. I'm still not sad. Though now I feel bad about not feeling bad about her death...I don't know why I'm posting this here. I guess I just needed to let it out.

28
Math and Science / Splitting a Bezier?
« on: May 08, 2011, 07:14:17 pm »
Hey I need some help (obviously...otherwise I wouldn't be posting).

I'm trying to figure out how to split a cubic Bezier curve into two separate cubic Bezier curves at a specified point on the curve, but I can't seem to figure out how to do it. I know the control points, and therefore I know the equation.

Here's the equation as defined by Wikipedia:

Where B(t) is a single point on the bezier curve, and Pn is the nth control point.

Any help would be greatly appreciated!


Edit: Added an example of what I'm talking about. I have a full Bezier (top) and I want to split it at a certain point (of which I know the "t" value for the equation) into two independent Bezier curves.

29
Gaming Discussion / Getting the Hookshot
« on: May 04, 2011, 04:05:25 am »
I was watching my dad play Ocarina of Time again, and it occurred to me.....there's nothing to tell you that you need to go find the Ocarina in Dampé's grave in order to get into the Forest Temple. You just have to know that that's what you need.

I am aware that if you enter Dampé's house as a kid and read his diary he mentions "something that grows and shrinks," obviously referencing the hookshot that you get from his grave later on, but there's no way to know (unless you've already played the game) that the item that "grows and shrinks" also allows you to pull yourself up to unreachable places.

Is there any real clue that tells you that the next thing you need to get is the hookshot? If there is something, please let me know!

30
Miscellaneous / My essay for...a dance competition?
« on: April 25, 2011, 08:20:50 pm »
As part of an entry in a dance competition I have to write an essay. The prompt was "Describe the emotion you feel when you take the stage at competition." Here's my entry:


State of Mind

   I am a performer. You are a performer. Every one of us is a performer. Every smile, every tear, every interaction, and every conversation is a performance. Likewise, every performance is a conversation. When I get on the stage, I become a vessel for energy and expression. It is my duty to give that to my audience and to make them feel what I feel. But that still brings us down to a final question: what do I feel? What is the emotion, the expression, the power that I cannot help but pass on to my audience?

   The answer to the question is both surprisingly simple, and unimaginably complex. As I wait to enter the stage I feel relaxed and focused. As I walk onto the stage I feel the surge of energy beginning to flow through me, radiating outward through my limbs all the way to the tips of my fingers and toes. But the instant the music starts is when everything really happens. It took me a while to figure out what goes on inside my head when I dance, but I finally realized that it’s not an overwhelming rush of emotion, but rather an overwhelming rush of music. Even when there is no music, I find my own music either in my mind or in my surroundings. The music engulfs me and sends its energy pulsing through my body. It was only after I understood the source of my energy that I also realized that the music is not just a background track for the choreography. In fact, the complete opposite is true: the choreography is a physical representation of the energy that flows from the music. Thus, I, the dancer, am the only possible means of communication between that choreography and the audience.

   You see, when I get up on stage, I don’t perform for my audience. I communicate with them. The word “perform” implies that I consider myself to be the main focus of my actions, which is simply not true; it’s all about the music. The music is what I have to communicate, and therefore the music is my emotion. Emotion (n.): a natural instinctive state of mind deriving from one's circumstances, mood, or relationship with others.

Pages: 1 [2] 3 4