在机器视觉引导项目中,经常出现旋转中心与旋转轴不重合的情况,这种情况下的坐标计算方法并不复杂,利用高中所学的数学知识即可解答,第一步就是找到旋转中心点,这个是你的运动机构的不是产品上的,比如机械手。
要找到旋转中心,只需要任意旋转三次,取这三个点求其圆心与半径,其实只需圆心坐标即可,旋转所在点就是运动机构的旋转中心,比如机械手的6轴旋转,6轴所在位置就是其旋转中心,这是重合的情况。一旦加上手爪,就需要我们自己计算旋转中心了,下面是C#的圆心求解方法。
代码如下
复制
struct mPoint { public double X; public double Y; } struct circle { public mPoint center; public float R; } mPoint getcenter(mPoint p1,mPoint p2,mPoint p3) { mPoint rpoint; double a = p1.X - p2.X; double b = p1.Y - p2.Y; double c = p1.X - p3.X; double d = p1.Y - p3.Y; double e = (Math.Pow(p1.X, 2) - Math.Pow(p2.X, 2) + Math.Pow(p1.Y, 2) - Math.Pow(p2.Y, 2)) / 2.0; double f = (Math.Pow(p1.X, 2) - Math.Pow(p3.X, 2) + Math.Pow(p1.Y, 2) - Math.Pow(p3.Y, 2)) / 2.0; double det = b * c - a * d; if (Math.Abs(det) > 0) { //x0,y0为计算得到的原点 double x0 = -(d * e - b * f) / det; double y0 = -(a * f - c * e) / det; rpoint.X = x0; rpoint.Y = y0; return rpoint; } else { mPoint ab; ab.X = 9999; ab.Y = 9999; return ab ; } }
怎么使用我就不多讲了,应该都能看懂。算法是根据圆的方程来的。
下一章再讲已知圆周上一点,球其旋转一定角度后的坐标。
评论 (2)