Ios 画一条类似刻度盘的线,指向用户';s接触点

Ios 画一条类似刻度盘的线,指向用户';s接触点,ios,objective-c,math,geometry,Ios,Objective C,Math,Geometry,假设我想画一条类似于时钟刻度盘(蓝线)的线,从屏幕中心(中心)开始,到用户触摸位置(a、B或C)结束 不管手指有多远,表盘的长度和大小都是一样的 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event allTouches] anyObject]; CGPoint touchLocation = [touc

假设我想画一条类似于时钟刻度盘(蓝线)的线,从屏幕中心(中心)开始,到用户触摸位置(a、B或C)结束

不管手指有多远,表盘的长度和大小都是一样的

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
                UITouch *touch = [[event allTouches] anyObject];
                CGPoint touchLocation = [touch locationInView:touch.view];
                NSLog(@"Center point = %f %f",self.view.center.x,self.view.center.y);
                NSLog(@"finter at point = %f %f",touchLocation.x,touchLocation.y);
                // line re drawing itself ...
                NSLog(@"end point = %f %f",?,?);           

}


你需要知道你的队伍的长度。它与接触点无关,对吗

首先找到触摸相对于中心点的坐标

x = Touch.x - center.x
y = Touch.y - center.y
现在我们需要得到角度

angle = arctan(y / x)
如果x为负数,调整180度(pi)-这将恢复分割中丢失的部分

现在将sin(角度)和cos(角度)乘以所需的长度,得到新的点

newX = cos(angle) * length
newY = sin(angle) * length
这里有一些Swift代码,可以让你大致达到目的。在操场上试着验证不同的触摸值和长度

let lineLength = 13.0

// Touch points
let x = -5.0
let y = -5.0

// Calculate angle
var angle = atan(y / x)

if x < 0 {
    angle += 3.14159;
}

// Get new X and Y
var newX = cos(angle) * lineLength
var newY = sin(angle) * lineLength
让lineLength=13.0
//接触点
设x=-5.0
设y=-5.0
//计算角度
变量角度=atan(y/x)
如果x<0{
角度+=3.14159;
}
//得到新的X和Y
var newX=cos(角度)*线宽
var newY=sin(角度)*线宽

谢谢,但是应该从中心点减去newX和newY,不是吗?是的-我显示的swift代码假设您已经将中心转换为(0,0),所以您应该将center.x添加到newX,将center.Y添加到newY。这应该是你的最终终点。