如何计算圆弧上的点y位置?当我有半径时,弧的起点和终点
How to calculate points y position on arc? When i have radius, arcs starting and ending points
我正在尝试在 CNC 上编写程序。基本上我有圆弧开始 x, y ,半径和结束 x, y 我也知道圆弧的方向顺时针或 cc。所以我需要找出特定x位置的圆弧上y的值。最好的方法是什么?
我在这个网站 here 上发现了类似的问题。但我不确定如何获得角度 a.
圆的方程是x^2 + y^2 = r^2
对于您的情况,我们知道 x_random
和 R
代入知道我们得到,
x_random ^ 2 + y_random ^ 2 = R ^ 2
并求解 y_random
get get
y_random = sqrt( R ^ 2 - x_random ^ 2 )
现在我们有 y_random
编辑:这仅在您的弧是圆弧而不是椭圆弧时才有效
要使这个答案适应椭圆,你需要使用这个方程,而不是圆的方程
( x ^ 2 / a ^ 2 ) + ( y ^ 2 / b ^ 2 ) = 1
,其中 a
是沿 x axis
的半径,b
是沿 y axis
的半径
用于从名为 data.txt
的文件中读取数据并计算一系列 y_random
值并将它们写入名为 out.txt
的文件的简单脚本
import math
def fromFile():
fileIn = open('data.txt', 'r')
output = ''
for line in fileIn:
data = line.split()
# line of data should be in the following format
# x h k r
x = float(data[0])
h = float(data[1])
k = float(data[2])
r = float(data[3])
y = math.sqrt(r**2 - (x-h)**2)+k
if ('\n' in line):
output += line[:-1] + ' | y = ' + str(y) + '\n'
else:
output += line + ' | y = ' + str(y)
print(output)
fileOut = open('out.txt', 'w')
fileOut.write(output)
fileIn.close()
fileOut.close()
if __name__ == '__main__':
fromFile()
data.txt
应该这样格式化
x0 h0 k0 r0
x1 h1 k1 r1
x2 h2 k2 r2
... for as many lines as required
首先你要找到圆方程。让我们起点Pst = (xs,ys)
,终点Pend = (xend,yend)
为简单起见,将所有坐标移动(-xs, -ys)
,因此起点成为坐标原点。
新Pend' = (xend-xs,yend-ys) = (xe, ye)
,新'random point'坐标为xr' = xrandom - xs
,未知圆心为(xc, yc)
xc^2 + yc^2 = R^2 {1}
(xc - xe)^2 + (yc-ye)^2 = R^2 {2} //open the brackets
xc^2 - 2*xc*xe + xe^2 + yc^2 - 2*yc*ye + ye^2 = R^2 {2'}
subtract {2'} from {1}
2*xc*xe - xe^2 + 2*yc*ye - ye^2 = 0 {3}
yc = (xe^2 + ye^2 - 2*xc*xe) / (2*ye) {4}
substitute {4} in {1}
xc^2 + (xe^2 + ye^2 - 2*xc*xe)^2 / (4*ye^2) = R^2 {5}
solve quadratic equation {5} for xc, choose right root (corresponding to arc direction), find yc
having center coordinates (xc, yc), write
yr' = yc +- Sqrt(R^2 -(xc-xr')^2) //choose right sign if root exists
and finally exclude coordinate shift
yrandom = yr' + ys
我正在尝试在 CNC 上编写程序。基本上我有圆弧开始 x, y ,半径和结束 x, y 我也知道圆弧的方向顺时针或 cc。所以我需要找出特定x位置的圆弧上y的值。最好的方法是什么? 我在这个网站 here 上发现了类似的问题。但我不确定如何获得角度 a.
圆的方程是x^2 + y^2 = r^2
对于您的情况,我们知道 x_random
和 R
代入知道我们得到,
x_random ^ 2 + y_random ^ 2 = R ^ 2
并求解 y_random
get get
y_random = sqrt( R ^ 2 - x_random ^ 2 )
现在我们有 y_random
编辑:这仅在您的弧是圆弧而不是椭圆弧时才有效
要使这个答案适应椭圆,你需要使用这个方程,而不是圆的方程
( x ^ 2 / a ^ 2 ) + ( y ^ 2 / b ^ 2 ) = 1
,其中 a
是沿 x axis
的半径,b
是沿 y axis
用于从名为 data.txt
的文件中读取数据并计算一系列 y_random
值并将它们写入名为 out.txt
import math
def fromFile():
fileIn = open('data.txt', 'r')
output = ''
for line in fileIn:
data = line.split()
# line of data should be in the following format
# x h k r
x = float(data[0])
h = float(data[1])
k = float(data[2])
r = float(data[3])
y = math.sqrt(r**2 - (x-h)**2)+k
if ('\n' in line):
output += line[:-1] + ' | y = ' + str(y) + '\n'
else:
output += line + ' | y = ' + str(y)
print(output)
fileOut = open('out.txt', 'w')
fileOut.write(output)
fileIn.close()
fileOut.close()
if __name__ == '__main__':
fromFile()
data.txt
应该这样格式化
x0 h0 k0 r0
x1 h1 k1 r1
x2 h2 k2 r2
... for as many lines as required
首先你要找到圆方程。让我们起点Pst = (xs,ys)
,终点Pend = (xend,yend)
为简单起见,将所有坐标移动(-xs, -ys)
,因此起点成为坐标原点。
新Pend' = (xend-xs,yend-ys) = (xe, ye)
,新'random point'坐标为xr' = xrandom - xs
,未知圆心为(xc, yc)
xc^2 + yc^2 = R^2 {1}
(xc - xe)^2 + (yc-ye)^2 = R^2 {2} //open the brackets
xc^2 - 2*xc*xe + xe^2 + yc^2 - 2*yc*ye + ye^2 = R^2 {2'}
subtract {2'} from {1}
2*xc*xe - xe^2 + 2*yc*ye - ye^2 = 0 {3}
yc = (xe^2 + ye^2 - 2*xc*xe) / (2*ye) {4}
substitute {4} in {1}
xc^2 + (xe^2 + ye^2 - 2*xc*xe)^2 / (4*ye^2) = R^2 {5}
solve quadratic equation {5} for xc, choose right root (corresponding to arc direction), find yc
having center coordinates (xc, yc), write
yr' = yc +- Sqrt(R^2 -(xc-xr')^2) //choose right sign if root exists
and finally exclude coordinate shift
yrandom = yr' + ys