# center of the circle.

## Recommended Posts

We can get the three red points by default, and we draw two lines, from point 1 to point 2, and from point 2 and point 3.

from the center of those two lines draw two lines perpenticular to the the two lines.

and then at the intersection of these two new lines, this is the center of the circle.

ok, so we get coordinates of 3 (x,y) points, how do we program au3 to find the center of the circle?

Edited by qwertylol

##### Share on other sites

it's the au3 technique I am not sure of.

for instance, how do you get the perpendicular lines which will intersect at the center?

that's the last step, and the only one I am not sure of.

##### Share on other sites

Converted the code posted at http://mathforum.org/library/drmath/view/54323.html

```func Center(\$bx,\$by,\$cx,\$cy,\$dx,\$dy)
\$temp=\$cx*\$cx+\$cy*\$cy
\$bc=(\$bx*\$bx+\$by*\$by-\$temp)/2.0
\$cd=(\$temp-\$dx*\$dx-\$dy-\$dy)/2.0
\$det=(\$bx-\$cx)*(\$cy-\$dy)-(\$cx-\$dx)*(\$by-\$cy)
\$det=1/\$det
\$CenterX=(\$bc*(\$cy-\$dy)-\$cd*(\$by-\$cy))*\$det
\$CenterY=((\$bx-\$cx)*\$cd-(\$cx-\$dx)*\$bc)*\$det
dim \$Center[2]
\$Center[0]=\$CenterX
\$Center[1]=\$CenterY
Return \$Center
EndFunc```

takes 3 points (x and y of each) returns a 2 element array with the x in element 0 and y in elemment 1.

Haven't nested it except for syntax but it should work...

Edited by evilertoaster

##### Share on other sites

Converted the code posted at http://mathforum.org/library/drmath/view/54323.html

```func Center(\$bx,\$by,\$cx,\$cy,\$dx,\$dy)
\$temp=\$cx*\$cx+\$cy*\$cy
\$bc=(\$bx*\$bx+\$by*\$by-\$temp)/2.0
\$cd=(\$temp-\$dx*\$dx-\$dy-\$dy)/2.0
\$det=(\$bx-\$cx)*(\$cy-\$dy)-(\$cx-\$dx)*(\$by-\$cy)
\$det=1/\$det
\$CenterX=(\$bc*(\$cy-\$dy)-\$cd*(\$by-\$cy))*\$det
\$CenterY=((\$bx-\$cx)*\$cd-(\$cx-\$dx)*\$bc)*\$det
dim \$Center[2]
\$Center[0]=\$CenterX
\$Center[1]=\$CenterY
Return \$Center
EndFunc```

takes 3 points (x and y of each) returns a 2 element array with the x in element 0 and y in elemment 1.

Haven't nested it except for syntax but it should work...

I really appreciate that you wrote this for me, but Iã€€am still confused LOL

can you explain for me, how this works?

##### Share on other sites

especially the method.

##### Share on other sites

your script would look something like this:

```\$center = Center(1,2,2,4,2,5)

MsgBox(0,\$center[0] + " " + \$center[1] )

func Center(\$bx,\$by,\$cx,\$cy,\$dx,\$dy)
\$temp=\$cx*\$cx+\$cy*\$cy
\$bc=(\$bx*\$bx+\$by*\$by-\$temp)/2.0
\$cd=(\$temp-\$dx*\$dx-\$dy-\$dy)/2.0
\$det=(\$bx-\$cx)*(\$cy-\$dy)-(\$cx-\$dx)*(\$by-\$cy)
\$det=1/\$det
\$CenterX=(\$bc*(\$cy-\$dy)-\$cd*(\$by-\$cy))*\$det
\$CenterY=((\$bx-\$cx)*\$cd-(\$cx-\$dx)*\$bc)*\$det
dim \$Center[2]
\$Center[0]=\$CenterX
\$Center[1]=\$CenterY
Return \$Center
EndFunc```

i would reccomend that you quickly read up on methods in the helpfile so that you understand better.

the method above accepts 3 points on the circle, in the form (x1,y1,x2,y2,x3,y3) and returns an array of the x/y coordinates of the center.

Edited by ame1011

[font="Impact"] I always thought dogs laid eggs, and I learned something today. [/font]

##### Share on other sites

I know how to use it, but I want to be through.

What are the mathmetical medthod?

##### Share on other sites

Can you tell me how it work, mathematically?

because there is no way I'd understand the code without knowing that.

##### Share on other sites

Can you tell me how it work, mathematically?

because there is no way I'd understand the code without knowing that.

##### Share on other sites

read what is already posted.... i just said all I did was convert what was already posted at http://mathforum.org/library/drmath/view/54323.html

The process is already explained on that page and several others listed on http://mathforum.org/library/drmath/sets/s...ter_circle.html decribe how to find a center point of a circle with 3 points... I'm no more mathmatically inclined than the next guy, I went form knowing nothing about it to knowing how to do it from what's psoted there.

Edited by evilertoaster

##### Share on other sites

If you want to get the mid without knowing the coordinates, make the circle a specific color. Then do a pixel search for it. Once it has that one coordinate, have the mouse coords - or + to the next step up until you have an average circle. Then take the 4 point coordinates, add them by pairs, and divide by 2. I think you should get the x,y of the mid dot. Just a creative idea. Dunno if it'd work.

##### Share on other sites

Can you tell me how it work, mathematically?

because there is no way I'd understand the code without knowing that.

Take a pen and a piece of paper, remember some basic geometry stuff (like how to find a triangle side by knowing the other 2) and you will find the explanation by yourself. To ask so many times for mathematical explanations in an AutoIt forum seem to be a little ... hmmm ... inappropriate.

SNMP_UDF ... for SNMPv1 and v2c so far, GetBulk and a new example script

wannabe "Unbeatable" Tic-Tac-Toe

Paper-Scissor-Rock ... try to beat it anyway :)

##### Share on other sites

Take a pen and a piece of paper, remember some basic geometry stuff (like how to find a triangle side by knowing the other 2) and you will find the explanation by yourself. To ask so many times for mathematical explanations in an AutoIt forum seem to be a little ... hmmm ... inappropriate.

well, i wanted to know how the code works.

math is fundamental for programmers too.

##### Share on other sites

well, i wanted to know how the code works.

math is fundamental for programmers too.

I haven't read the previous posts carefully but the basic approach doesn't seem to be explained anywhere. You don't need to go looking up mathematical rules because all the information is there.

Take the first line. It's centre which is Xc,Yc = 0.5*(X1 + X2), 0.5*(Y1 + Y2)

Find the slope . Angle = atan ((y2-y1)/(X2 - X1))

So, the slope of the line at right angles is atan((X2-X1)/(Y2-Y1))

The equation for the line at right angles is

Y = M*x + K

we know M = (X2-X1)/(Y2-Y1) and we can work out K because

K = Yc - M*Xc

So then you can get the two equations for the 2 lines.

The next step is just to solve simulatious equations.

The solution is where they cross which is the centre of the circle.

Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script.

##### Share on other sites

```Func radar_center( \$ax, \$ay, \$bx, \$by, \$cx, \$cy )

;slopes

\$m1 = ( ( \$by - \$ay ) / ( \$bx - \$ax ) )
\$m2 = ( ( \$cy - \$by ) / ( \$cx - \$bx ) )
\$m1 = -\$m1
\$m2 = -\$m2

;midpoints

\$ab_mid_x = ( \$bx + \$ax ) / 2
\$ab_mid_y = ( \$by + \$ay ) / 2

\$bc_mid_x = ( \$cx + \$bx ) / 2
\$bc_mid_y = ( \$cy + \$by ) / 2

;c = y - mx ;     y = mx + c

\$c1 = \$ab_mid_y - \$m1 * \$ab_mid_x
\$c2 = \$bc_mid_y - \$m2 * \$bc_mid_x

;center of the circle
;shift signs for perpendicular functions.

\$center_x = ( \$c1 - \$c2 ) / ( \$m2 - \$m1 )
\$center_y = \$m1 * \$center_x + \$c2

MsgBox ( 0 , "title", \$center_x )
MsgBox ( 0 , "title", \$center_y )

;Return \$center_x & \$center_y
EndFunc```

for some reason this wouldn't work.

##### Share on other sites

I haven't read the previous posts carefully but the basic approach doesn't seem to be explained anywhere. You don't need to go looking up mathematical rules because all the information is there.

Take the first line. It's centre which is Xc,Yc = 0.5*(X1 + X2), 0.5*(Y1 + Y2)

Find the slope . Angle = atan ((y2-y1)/(X2 - X1))

So, the slope of the line at right angles is atan((X2-X1)/(Y2-Y1))

The equation for the line at right angles is

Y = M*x + K

we know M = (X2-X1)/(Y2-Y1) and we can work out K because

K = Yc - M*Xc

So then you can get the two equations for the 2 lines.

The next step is just to solve simulatious equations.

The solution is where they cross which is the centre of the circle.

I am not sure about the Angle = atan ((y2-y1)/(X2 - X1))

is atan arcTan ? ,also, can you illustrate with paint how the equation looks like ?

##### Share on other sites

I am not sure about the Angle = atan ((y2-y1)/(X2 - X1))

is atan arcTan ? ,also, can you illustrate with paint how the equation looks like ?

atan and arctan are the same thing to me. Some programming languages use one some the other.

Doesn't look to me like you need a diagram.

\$center_y = \$m1 * \$center_x + \$c2

should be

\$center_y = \$m2 * \$center_x + \$c2

Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script.

##### Share on other sites

```Dim \$ax = 48
Dim \$ay = 396

Dim \$bx = 275
Dim \$by = 497

Dim \$cx = 486
Dim \$cy = 326

radar_center( \$ax, \$ay, \$bx, \$by, \$cx, \$cy )

Func radar_center( \$ax, \$ay, \$bx, \$by, \$cx, \$cy )

;slopes

\$m1 = ( ( \$by - \$ay ) / ( \$bx - \$ax ) )
\$m2 = ( ( \$cy - \$by ) / ( \$cx - \$bx ) )
\$m1 = -\$m1
\$m2 = -\$m2

;midpoints

\$ab_mid_x = ( \$bx + \$ax ) / 2
\$ab_mid_y = ( \$by + \$ay ) / 2

\$bc_mid_x = ( \$cx + \$bx ) / 2
\$bc_mid_y = ( \$cy + \$by ) / 2

;c = y - mx ;     y = mx + c

\$c1 = \$ab_mid_y - \$m1 * \$ab_mid_x
\$c2 = \$bc_mid_y - \$m2 * \$bc_mid_x

;center of the circle
;shift signs for perpendicular functions.

\$center_x = ( \$c1 - \$c2 ) / ( \$m2 - \$m1 )
\$center_y = \$m2 * \$center_x + \$c2

MsgBox ( 0 , "title", \$center_x )
MsgBox ( 0 , "title", \$center_y )

;Return \$center_x & \$center_y
EndFunc```

for some reason this still doesn't work, I can't figure out why.

##### Share on other sites

```\$center = Center(48,396,275,497,486,326)

Msgbox ( 0, "x", \$center[0] )
MsgBox ( 0, "y", \$center[1] )

func Center(\$bx,\$by,\$cx,\$cy,\$dx,\$dy)
\$temp=\$cx*\$cx+\$cy*\$cy
\$bc=(\$bx*\$bx+\$by*\$by-\$temp)/2.0
\$cd=(\$temp-\$dx*\$dx-\$dy-\$dy)/2.0
\$det=(\$bx-\$cx)*(\$cy-\$dy)-(\$cx-\$dx)*(\$by-\$cy)
\$det=1/\$det
\$CenterX=(\$bc*(\$cy-\$dy)-\$cd*(\$by-\$cy))*\$det
\$CenterY=((\$bx-\$cx)*\$cd-(\$cx-\$dx)*\$bc)*\$det
dim \$Center[2]
\$Center[0]=\$CenterX
\$Center[1]=\$CenterY
Return \$Center
EndFunc```

This doesn't work either

## Create an account

Register a new account

×

• Wiki

• Back

• Git