Alright, so there are four types of transformations : Rotation, Reflection, Translation, and Dilation

The title it self says that I want to create a program that can transform objects.

Please watch this (I'm in need of something similar to this, it doesn't have to exactly the same with the fancy intro screen):

https://www.youtube.com/watch?v=kJ9-jImkv6o


--------------------------------------------------------------------------------------

Let me give you some basic information

Translations slide given point(s), here are the rules ("B" is a point). So, for:

Up B —> (y+b)
Down B —> (y-b)
Left B —> (x-b)
Right B —> (x+b)

--------------------------------------------------------------------------------------

Reflection reflect given point(s) at a point, here are the rules (x and y are the points). So, for:

Reflection over X-axis : (x,y) —> (x,-y)
Reflection over Y-axis : (x,y) —> (-x,y)
Reflection over Y=x : (x,y) —> (y,x)
Reflection over Y=-x : (x,y) —> (-y,-x)

--------------------------------------------------------------------------------------

Rotations rotate point(s) at certain degrees, here are the rules (x and y are the points). So, for:

Rotation Clock-Wise 90 Degrees : (x,y) —> (y,-x)
Rotation 180 Degrees : (x,y) —> (-x,-y)
Rotation Counter Clock-Wise 90 Degrees : (x,y) —> (-y,x)

--------------------------------------------------------------------------------------

A dilation changes the size of the image (object).

The amount by which the image grows or shrinks is called the "Scale Factor".

If the scale factor is say 2, the image is enlarged so its dimensions are twice the original.

If it is 0.5, the image is reduced, with its dimensions half the original.

When the scale factor is 1, the image is the exact same size as the original.

P.S: In dilation, multiply the dimensions of the original by the scale factor to get the dimensions of the image.

--------------------------------------------------------------------------------------

That was a rough explanation of what I'm planning to create.

We all have busy lives and I know that what I mentioned above is not a easy job. Although, I'm a newbie to TI BASIC, I will try my best to cooperate with you guys.

I'm not saying you to create the whole program for me…You can just help me out with, for example, only "Translations". Just try to do your best.

That was all that I could possibly say.

Good Luck to you an me! Peace!

Translation works like this:

Translate Point (3,5) Left 6 and Up 2

So "left and right" is the change in x value and "up and down" is the change in y value.

If you want to translate point (3,5) left 6 and up 2, you do:

x=3-6=-3
y=5+2=7

If it was to translate point (3,5) right 6 and down 2, then it would be:

x=3+6=9
y=5-2=3

Notice that there is a change in sign when you go left or right, up or down...

Left = -
Right = +
Down = -
Up = +

Can a program be created to do this? It should prompt for x value and y value then display the answer and I dont want it to be graphed...

Hope that helps with translations...
Okay, I set it up for you, but I didn't make the entire program. And yes, I know I used labels, I'm such a terrible person... and I know this can still be optimized a bit.

Code:

:Lbl 1
:ClrHome
:0->dim(L1
:Input "PTS:",A   //how many points you have on your shape
:For(I,2,2A,2
:Input sub("ABCDEFGHIJK",I/2,1)+"X:",B   //the more alphabet you have, the more points you can have
:Input " Y:",C
:B->L1(1+dim(L1
:C->L1(1+dim(L1
:End
:Lbl 2
:Menu("TRANSFORMATION?","TRANSLATE",A,"REFLECT",B,"ROTATE",C,"SCALE",D,"NEW SHAPE",1

:Lbl A
:ClrHome
:Disp "MOVE BY?
:Prompt X,Y   //how much you will move along x/y axis. you can put a negative sign to move left/down
:For(I,1,dim(L1),2
:L1(I)+X->L1(I
:L1(I+1)+Y->L1(I+1
:End
:Pause L1
:Goto 2

Lbl B

reflection stuff

Pause L1
Goto 2

Lbl C

Rotation stuff

Pause L1
goto 2

Lbl D

dilation stuff

Pause L1
goto 2
Thank you so much Smile

So in places of:

"reflection stuff "
"Rotation stuff"
"Rotation stuff "
"dilation stuff "

the code related to that subjects will go in, right?
AkonSpy wrote:
Thank you so much Smile

So in places of:

"reflection stuff "
"Rotation stuff"
"Rotation stuff "
"dilation stuff "

the code related to that subjects will go in, right?

Yes, you would just follow the same pattern as the translation code. so you would do

Code:

//ask for what reflection/rotation/dilation user wants
For(I,1,dim(L1),2
whatever your transformation is -> new value of L1(I)
whatever your transformation is -> new value of L1(I+1)
End
Pause L1
Goto 2
Would you please mind setting it up for me...???
Of course, Pause L1 will display it as
{X Y X Y X Y (etc.)}

If you want to change the way it displays it you can use the Output( command, or you can use list compression so that it displays as
{X.Y X.Y X.Y (etc.)}
I found this, can this help us out:


Code:

ClrHome
Output(2,6,"MATRIX")
Output(3,7,"|v5.5")
Output(5,7,"BY")
Output(6,1,"KARL STOERZINGER")
Output(7,1,"RELEASED 12/2001")
Pause
1->Z
Z->Q
{2,1}->L6

{2,2}->dim([A])
{2,1}->dim([B])
[[0][0]]->[B]
Goto 0
Lbl ZZ
Menu("FINAL MATRIX:","DON'T SAVE",0,"SAVE -CURRENT",QC,"SAVE -SLOT 1",Q1,"SAVE -SLOT 2",Q2,"SAVE -SLOT 3",Q3,"SAVE -SLOT 4",Q4)
Lbl QC
[G]->[B]
Goto 0
Lbl Q1
[G]->[C]
Goto 0
Lbl Q2
[G]->[D]
Goto 0
Lbl Q3
[G]->[E]
Goto 0
Lbl Q4
[G]->[F]
Goto 0

Lbl 0
dim([B])->L6
L6(2)->Q
ClrHome
Menu("MAIN MENU","MATRIX",OZ,"TRANSFORMATNS",OB,"GRAPH",Z,"EXIT",7)

Lbl Z
StoreGDB 0
Menu("GRAPH CURR MATRX","AxesOff",GO,"AxesOn SCALE=1",G1,"O[n],CUSTOM SCL.",GC,"CANCEL",0)
Lbl GO
AxesOff
Goto GG
Lbl G1
AxesOn
1->Xscl
1->Yscl
Goto GG
Lbl GC
ClrHome
Disp "ENTER Xscl/Yscl"
Input "SCALE=",Xscl
Xscl->Yscl
ClrHome
Lbl GG
{0}->L1
{0}->L2
dim([B])->L6
For(I,1,L6(2),1)
[B](1,I)->L1(I)
End
For(J,1,L6(2),1)
[B](2,J)->L2(J)
End
GridOff
FnOff
PlotsOff
Plot3(Scatter,L1,L2,plotsquare)
ZoomStat
ZSquare
Pause
RecallGDB 0
Goto 0

Lbl OZ
Menu("MATRIX MENU","DEFINE MATRIX",OA,"VIEW MATRIX",OC,"SAVE MATRIX",OS,"RECALL MATRIX",OR,"GO BACK",0)
Lbl OS
ClrHome
Menu("SAVE MATRIX TO:","SLOT 1",S1,"SLOT 2",S2,"SLOT 3",S3,"SLOT 4",S4,"CANCEL",0)
Lbl S1
[B]->[C]
Goto 0
Lbl S2
[B]->[D]
Goto 0
Lbl S3
[B]->[E]
Goto 0
Lbl S4
[B]->[F]
Goto 0
Lbl OR
Menu("WHICH MATRIX?","SLOT 1",R1,"SLOT 2",R2,"SLOT 3",R3,"SLOT 4",R4,"CANCEL",0)
Lbl R1
[C]->[B]
Goto 0
Lbl R2
[D]->[B]
Goto 0
Lbl R3
[E]->[B]
Goto 0
Lbl R4
[F]->[B]
Goto 0

Lbl OC
ClrHome
Menu("VIEW MATRIX","CURRENT MATRIX",VC,"SLOT 1",V1,"SLOT 2",V2,"SLOT 3",V3,"SLOT 4",V4,"CANCEL",0)
Lbl VC
Pause [B]
Goto 0
Lbl V1
Pause [C]
Goto 0
Lbl V2
Pause [D]
Goto 0
Lbl V3
Pause [E]
Goto 0
Lbl V4
Pause [F]
Goto 0

Lbl OA
Input "DIM MATRX: (2*?) ",Z
If Z<1 or Z>20
Then
Disp "INVALID DIM","MUST BE 1 TO 20","PRESS ENTER"
Pause
Goto OA
End
Z->Q
{2,Z}->dim([B])
For(Y,1,Z,1)
For(X,1,2,1)
ClrHome
Disp "ELEMENT"
Output(1,9,{X,Y})
Input W
W->[B](X,Y)
End
End
Goto 0
Lbl OB
Menu("TRANSFORMATIONS","ROTATIONS",1,"REFLECTIONS",2,"SIZE CHANGE",3,"SCALE CHANGE",4,"TRANSLATIONS",5,"CUSTOM",66,"GO BACK",0)
Lbl 66
Menu("CUSTOM MATRIX","USE STORED M.",22,"CREATE NEW",11,"CANCEL",0)
Lbl 11
ClrHome
Input "ELEMENT {1,1}   ",A
ClrHome
Input "ELEMENT {2,1}   ",B
ClrHome
Input "ELEMENT {1,2}   ",C
ClrHome
Input "ELEMENT {2,2}   ",D
ClrHome
[[A,C][B,D]]->[H]
[H]->[A]
Goto 9
Lbl 22
[H]->[A]
Goto 9

Lbl 1
Menu("ROTATIONS","0^^o,360^^o,~360^^o",RA,"90^^o,~270^^o",RB,"180^^o,~180^^o",RC,"270^^o,~90^^o",RD,"OTHER ANGLE",RE)
Lbl RE
ClrHome
Input "theta=",theta
[[cos(theta),~sin(theta)][sin(theta),cos(theta)]]->[A]
Goto 9
Lbl RA
[[1,0][0,1]]->[A]
Goto 9
Lbl RB
[[0,~1][1,0]]->[A]
Goto 9
Lbl RC
[[~1,0][0,~1]]->[A]
Goto 9
Lbl RD
[[0,1][~1,0]]->[A]
Goto 9
Lbl 9
ClrHome
Disp "TRANSFORMATION","MATRIX"
Pause [A]
ClrHome
Disp "FINAL MATRIX"
[A][B]->[G]
Pause [G]
Goto ZZ

Lbl 2
Menu("REFLECTIONS","X AXIS",RX,"Y AXIS",RY,"Y=X LINE",RZ)
Lbl RX
[[1,0][0,~1]]->[A]
Goto 9
Lbl RY
[[~1,0][0,1]]->[A]
Goto 9
Lbl RZ
[[0,1][1,0]]->[A]
Goto 9
Lbl 3
ClrHome
Input "MAGNITUDE       ",M
[[M,0][0,M]]->[A]
Goto 9
Lbl 4
ClrHome
Input "X MAGNITUDE     ",X
Input "Y MAGNITUDE     ",Y
[[X,0][0,Y]]->[A]
Goto 9
Lbl 5
dim([B])->dim([A])
Input "X VALUE         ",X
Input "Y VALUE         ",Y
0->J
Disp Q
Lbl YY
J+1->J
X->[A](1,J)
Y->[A](2,J)
If J<Q
Goto YY
ClrHome
Disp "TRANSFORMATION","MATRIX"
Pause [A]
ClrHome
Disp "FINAL MATRIX"
[A]+[B]->[G]
Pause [A]+[B]
{2,2}->dim([A])
Goto ZZ
Lbl 7
ClrHome
I also found this, it's hard for me to understand:


Code:

DelVar {Y1}
DelVar {Y2}
DelVar A
DelVar B
DelVar C
DelVar D
DelVar Str1
Input "F(X)=",Str1
String>Equ(Str1,{Y1})
Disp "ALL ENTRIES"
Disp "SHOULD BE"
Disp "POSITIVE."
Pause
Goto 1
Lbl 1
ClrHome
Menu("HORIZ SHIFT","LEFT",11,"RIGHT",12,"NONE",13)
Lbl 11
Input "HOW FAR?",C
If C<0
abs(C)->C
~C->C
ClrHome
Goto 2
Stop
Lbl 12
Input "HOW FAR?",C
If C<0
abs(C)->C
ClrHome
Goto 2
Stop
Lbl 13
0->C
ClrHome
Goto 2
Stop
Lbl 2
Menu("HORIZ RESCALING","STRETCH",21,"COMPRESS",22,"NONE",23)
Lbl 21
Input "FACTOR?",B
If B<0
abs(B)->B
If B>1
Then
Disp "THIS IS A"
Disp "COMPRESSION!"
Input "PROCEED (Y/N)?",V
If V=Y
Then
ClrHome
Disp "COMPRESSION"
Goto 22
Else
Goto 21
End
End
ClrHome
Goto 3
Stop
Lbl 22
Input "FACTOR?",B
If B<0
abs(B)->B
If B>0 and B<1
Then
Disp "THIS IS A"
Disp "STRETCH!"
Disp "PROCEED (Y/N)?",V
If V=Y
Then
ClrHome
Disp "STRETCH"
Goto 21
Else
ClrHome
Disp "COMPRESSION"
Goto 22
End
End
ClrHome
Goto 3
Stop
Lbl 23
1->B
ClrHome
Goto 3
Stop
Lbl 3
Menu("VERT RESCALING","STRETCH",31,"COMPRESS",32,"NONE",33)
Lbl 31
Input "FACTOR?",A
If A<0
abs(A)->A
If A>0 and A<1
Then
Disp "THIS IS A"
Disp "COMPRESSION!"
Input "PROCEED (Y/N)?",V
If V=Y
Then
ClrHome
Disp "COMPRESSION"
Goto 32
Else
Goto 31
End
End
ClrHome
Goto 4
Stop
Lbl 32
Input "FACTOR?",A
If A<0
abs(A)->A
If A>1
Then
Disp "THIS IS A"
Disp "STRETCH!"
Input "PROCEED (Y/N)?",V
If V=Y
Then
ClrHome
Disp "STRETCH"
Goto 31
Else
Goto 32
End
End
ClrHome
Goto 4
Stop
Lbl 33
1->A
ClrHome
Goto 4
Stop
Lbl 4
Menu("REFLECTION","X-AXIS",41,"Y-AXIS",42,"BOTH",43,"NONE",44)
Lbl 41
~A->A
Goto 5
Stop
Lbl 42
~B->B
Goto 5
Stop
Lbl 43
~A->A
~B->B
Goto 5
Stop
Lbl 44
Goto 5
Stop
Lbl 5
Menu("VERT SHIFT","UP",51,"DOWN",52,"NONE",53)
Lbl 51
ClrHome
Input "HOW FAR?",D
If D<0
abs(D)->D
Goto 6
Stop
Lbl 52
ClrHome
Input "HOW FAR?",D
If D<0
abs(D)->D
~D->D
Goto 6
Stop
Lbl 53
0->D
Goto 6
Stop
Lbl 6
ClrHome
Output(1,1,"FINAL FNC:")
Output(2,1,A)
Output(2,14,"*")
Output(3,1,"FNC(")
Output(3,5,B)
Output(3,15,"*")
Output(4,1,"X-")
Output(4,4,C)
Output(4,15,")")
Output(5,1,"+")
Output(5,2,D)
Pause
Goto 7
Stop
Lbl 7
Menu("PLOT","YES",71,"NO",72)
Lbl 71
(~10-C)/abs(B)->Xmin
(10+C)/abs(B)->Xmax
1/abs(B)->Xscl
(~10)/abs(A)+D->Ymin
(10)/abs(A)+D->Ymax
1/abs(A)->Yscl
"A{Y1}(BX-C)+D"->{Y2}
FnOff
FnOn 1,2
DispGraph
Pause
ClrHome
Stop
Lbl 72
ClrHome
Return
Stop
This website might be more helpful:

http://mathbits.com/MathBits/TISection/Geometry/Transformations.htm
Yes, I guess those would work, but they are very unoptimized... Plus you shouldn't need code that long. If you want, I can try to finish my program and post it here, but it might be a while, since I'm busy
I'm ready to wait for it...please post the program...please
Can the x and y values be stored are follows:

x into L1
y into L2
Yes, that would make it easier to transform, however that will take up a little bit more memory but overall it would probably be better Smile
Michael2_3B wrote:
Yes, that would make it easier to transform, however that will take up a little bit more memory but overall it would probably be better Smile


Can you do that for me because i'm trying it from this morning and i'm still getting errors?
Alright, so after 1 hour I came up with this (only translation):


Code:

ClrHome
Output(1,9,"TRANSLATION
Disp ""
Disp ""
Input "X-COORDINATE: ",X
Input "Y-COORDINATE: ",Y
X->L1(1)
Y->L2(1)
Disp ""
Disp "MOVE BY?"
Disp ""
Input "CHANGE IN X: ",A
Input "CHANGE IN Y: ",B
A+L1->L3
B+L2->L4
Disp ""
Output(10,8,"NEW POINTS: "
Disp {L3(1),L4(1)}
"


So, I want it to ask me how points are there and compile them accordingly.

Can The points be displayed as"

"Point A:"
"Point B:"
"Point C:"

Then the answer should be:

"Point A':"
"Point B':"
"Point C':"

Please help me out?
for the 'how many points thing, try this:

Code:
 Input "amt of pts?",D
For(A,1,D
ClrHome
Disp "Point"
Output(1,7,A
Input "X",L1(A
Input "Y",L2(A
End
ClrHome                              *Here's the movement section*
Output(1,1,"Move by?"
Prompt X,Y
X+L1->L1
Y+L2->L2
For(A,1,D                            *Here's how to display the new points*
ClrHome
Disp "Point"
Output(1,7,A
Disp {L1(A),L2(A)
End

Also, you may want to check out some of the tutorials on http://tibasicdev.wikidot.com/development. I've been programming since 5th grade, and I still learned quite a bit from the site.
JLovern wrote:
for the 'how many points thing, try this:

Code:
 Input "amt of pts?",D
For(A,1,D
ClrHome
Disp "Point"
Output(1,7,A
Input "X",L1(A
Input "Y",L2(A
End
ClrHome                              *Here's the movement section*
Output(1,1,"Move by?"
Prompt X,Y
X+L1->L1
Y+L2->L2
For(A,1,D                            *Here's how to display the new points*
ClrHome
Disp "Point"
Output(1,7,A
Disp {L1(A),L2(A)
End

Also, you may want to check out some of the tutorials on http://tibasicdev.wikidot.com/development. I've been programming since 5th grade, and I still learned quite a bit from the site.


Thanks for posting that I will return to you after testing it... Smile

Code:
Input "Amt of Pts? ",D
D->dim(L1
D->dim(L2
For(A,1,D
Disp "Point"
Output(1,7,A
Prompt X                   *I'm using prompt instead of Input for efficiency
X->L1(A
Prompt Y
Y->L2(A
End
JLovern wrote:

Code:
Input "Amt of Pts? ",D
D->dim(L1
D->dim(L2
For(A,1,D
Disp "Point"
Output(1,7,A
Prompt X                   *I'm using prompt instead of Input for efficiency
X->L1(A
Prompt Y
Y->L2(A
End


So the lines "Disp "Point"" and "Output(1,7,A" are causing problems...

"Point 1" displays at 1,7 but "Point 2" is not displayed as expected...

"Point 1" in the first line turns into "Point 2"....

How to make the "numbers" move with "Point"....

Thanks for any help....
  
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 4
» All times are UTC - 5 Hours
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

 

Advertisement