 Computer Science Canada Programming C, C++, Java, PHP, Ruby, Turing, VB   Username:   Password: Wiki Blog Search Turing Chat Room Members
Math.Distance [Tutorial]        Author Message
upthescale Posted: Mon May 29, 2006 7:21 pm   Post subject: Math.Distance [Tutorial]

Ok, lets get a ready for a tutorial that I don't think has yet come in Comp.Sci, and it is obviosuly Math.Distance. Math.Distance, along with many other ways, is a way of creating a 'Hit Detection'...Usually with boxes, you may right in the coordinates liek so:
 code: if x > 100 and x < 200 and y > 100 and y< 200 then %Code end if

...Hmm, yes that was the Math way...Well, what about circles? there are ways to do it with circles also...
 code: if whatdotcolor (x,y) = 7 then %Code end if

There are other ways also, but I will explain Math.Distance...

First and foremost, you must create the variables...

So now we have a variable for the whole ball, the radius can be whatever number you like, along with the ballx and bally. In this case, the ball will be the size of 30...

So let's assume that when the mouse hits the circle, the hit detection will occur, well we haven't created the x and y varialbes for the mouse have we?...

 code: var mx,my,b:int

Now we have...Ok, so now we will input the Math.Distance function, I will do it one line by one, and explain each line...Only one line hehe.

 code: if Math.Distance (mx,my,ballx,bally) < radius * 2 then put"We Have A Detection!" end if

Ok, a little confusing but not really. You see the brackets with the 4 variablesi n it, recognize them? Yes they are indeed the variables we declared earlier in the tutorial, mad flashbacks! So we have the mx, and my, ballx and bally all in one package. So when all these meet, and the mouse is les than the radius, then we have a detection. WHAT THE... WHAT THE HECK IS THE *2? well that is easy, because since the radius is in the middle of the circle, we want the detection to happen when we touch the outside of the circle. So by adding the * 2, the program will multiply all around the ball, bringing the detection to tyhe outside of the ball

Now we have that covered, but what about wh a circle hits a line? Well, for this, instead of Math.Distance, we will put:

 code: Math.DistancePointLine

An example would be:

 code: if Math.DistancePointLine (linex, liney, 600, 200, 600, 300) < radius then         Input.Pause     end if

Now, it is the same thing, in this case you aren't using mousewhere, except you have a line (you can use mousewhere if you want, it would still work)...So you have linex,and liney, and the coordinates for the line all in the same package. What you can do is just copy and paste the line into the brackets beside your to other variables. (Don,t use the color, or there will be to many parameters)

Pretty Easy? I think so!

Here is a little program I put together, not the best coding, but it works:

So I guess that is it for this tutorial on Math.Distance, Happy Programming    TheOneTrueGod  Posted: Mon May 29, 2006 8:02 pm   Post subject: (No subject)

Er, not too bad, but the main problem I see here is that a lot of people don't have the Math module in their version of Turing...

Also, you're supposed to get these things approved by mods before you post them...
I know i'm a hypocrite, I forgot that when I was posting mine.

Anyways, instead of using Turings pre-built Math Modules, why not just create your own, that way you actually know whats going on in your code? For this tutorial, you should have at least posted what these functions actually do. For example, post the distance formula.

Now, on to the actual tutorial.

First and foremost,
Quote:
if Math.Distance (mx,my,ballx,bally) < radius * 2 then
put"We Have A Detection!"
end if

radius * 2 is not what you want. You want (circleRadiusOne + CircleRadiusTwo), because if the two circles are of a different size, then radius * 2 wont work. You failed to give this description in your explanation.

Also, rather than saying (mx,my,ballx,bally), use what Turing Help gives you,

Quote:

Math.Distance (x1, y1, x2, y2 : real) : real

In your code, it would be assumed that you can only use integers for Math.Distance, but this is not so!

Same thing applies to your Math.DistancePointLine code (Though that one was just wrong anyways...)

Quote:

Math.DistancePointLine (xp, yp, x1, y1, x2, y2 : real) : real

xp,yp is the point. (x1,y1) (x2,y2) are the ordered pairs of the line.

You said:
Quote:
Math.DistancePointLine (linex, liney, 600, 200, 600, 300)

I havn't checked over your program yet, but i'll look it over and post again when i'm done with that. Cervantes  Posted: Mon May 29, 2006 8:37 pm   Post subject: (No subject)

It should be noted that Math.Distance and Math.DistancePointLine can be added to your Turing library. Instructions are here.

Is it just me and Delos or are these kinds of tutorials aggrivating? For example, is it a good tutorial if the author writes,
upthescale wrote:
Now we have...Ok, so now we will input the Math.Distance function

It sounds like you really don't know what you're talking about and you are making it up as you go, refusing to use the backspace key.

Though once V3 comes out, I guess I'd promote these kinds of submissions is since they won't clog down the 'official' tutorials as they will have their own place. And really, I'll bet upthescale learned a lot while making this tutorial.  Delos  Posted: Mon May 29, 2006 10:39 pm   Post subject: (No subject)

Learning is good, to be sure. I will put forth the suggestion I usually do in cases like these, if upthescale would like to improve his tutorial - simply PM either Cervantes or myself and we'll send you the necassary BBCode. Of course, you will have to do a hefty job in making this worthy of some of the other high-class tuts around here. Windsurfer  Posted: Mon Jun 05, 2006 10:12 pm   Post subject: (No subject)

People, people! Math.Distance is slow! i don't know why, but i tested it comparing the timing of a function I made:

 code: function Pt_Near (h1, v1, h2, v2, dist : real) : boolean     %which method is faster?     %result sqrt ((h2 - h1) *(h2 - h1) + (v2 - v1) *(v2 - v1)) < dist     result sqrt ((h2 - h1) ** 2 + (v2 - v1) ** 2) < dist end Pt_Near

Using a program as follows, i found that my algorythm is faster:

 code: var last_time : real function Pt_Near (h1, v1, h2, v2, dist : real) : boolean     result sqrt ((h2 - h1) ** 2 + (v2 - v1) ** 2) < dist end Pt_Near var test1, test2 : string put "Running... time is in miliseconds..." %These values are completly arbitrary loop     last_time := Time.Elapsed     for lp : 1 .. 100000         % const this := lp         if Math.Distance (1, 1, 34, 23) < 54 then         end if     end for     test1 := "using turing's built-in: " + realstr (Time.Elapsed - last_time, 15)     last_time := Time.Elapsed     for lp : 1 .. 100000         if Pt_Near (1, 1, 34, 23, 54) then         end if     end for     test2 := "using my more efficient calculation: " + realstr (Time.Elapsed - last_time, 3)     cls     put test1     put test2 end loop

so yeah... i just felt like sharing that. Would anyone be able to explain Turing's slowness? I'd really like to know, because I've been fighting with it's extremely poor preformance (especially when dealing with graphix... why can't there be some sort of DirectDraw plugin or something for hardware acceleration?) Delos  Posted: Tue Jun 06, 2006 9:11 am   Post subject: (No subject)

Yes Turing is slow with graphics. There is not way around that. It's an interpreted language so that is to be expected. I've heard, overever, that 4.1 is a little better w/ graphics. But then methinks you already use 4.1 so that is of no help in any case.
As for DX - not going to happen. If you're at the point where you need to use DX (note: need not want) then it's time for a new language! Windsurfer  Posted: Tue Jun 06, 2006 11:31 am   Post subject: (No subject)

Delos wrote:
If you're at the point where you need to use DX (note: need not want) then it's time for a new language!

Ahaha, how right you are! However, since my final project must be written in turing... i have no choice. And, yes, need is the right word. Take a look at my FP http://www.compsci.ca/v2/viewtopic.php?t=12468  Posted: Sun Oct 16, 2011 2:54 pm   Post subject: RE:Math.Distance [Tutorial]

so what are each of the parameters in Math.DistancePointLine?
EDIT sorry, i didnt see that post             