我有这个练习项目,允许用户用手指触摸屏幕.我做的非常简单的App作为锻炼方式回来了.我的小表弟冒昧地用我的iPad用手指在这个应用程序上绘制东西(儿童画:圆圈,线条等等,无论他想到什么).然后他开始绘制圆圈,然后他让我把它变成"好圆圈"(根据我的理解:将绘制的圆圈完美地圆形,因为我们知道无论我们用手指在屏幕上画出一些东西有多稳定,圆圈永远不会像圆圈那样圆润.)
所以我的问题是,在代码中是否有任何方法我们可以首先检测用户绘制的线条,形成一个圆圈,并通过使其在屏幕上完美圆形来生成大致相同大小的圆圈.做一个不那么直线的东西我会知道怎么做,但至于圆圈,我不知道如何用石英或其他方法去做.
我的理由是,在用户抬起手指以证明他正试图实际绘制圆圈之后,线的起点和终点必须相互接触或交叉.
cocoa-touch core-graphics quartz-graphics ios shape-recognition
(请在最后阅读更新3)我正在开发一个应用程序,它不断与设备的传感器一起工作,Accelerometer与Magnetic传感器一起工作以检索设备的方向(这里提到的目的).换句话说,我的应用程序需要知道设备的实时方位(然而,这是永远不可能的,所以尽可能快地代替,但真正以最快的速度可能!).正如Reto Meier在专业Android 4应用程序开发中所提到的:
加速度计每秒可以更新数百次......
我不能丢失传感器报告的任何数据,我也想对这些数据进行耗时的操作(检索方向,然后进行计算......).我决定使用LinkedBlockingQueue以下方法解决我的问题:
public void startSensors() {
LinkedBlockingQueue<float[][]> array=new LinkedBlockingQueue();
sensorListenerForOrientation = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
aValues = (event.values.clone());
else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
mValues = (event.values.clone());
if (aValues != null && mValues != null) {
try {
array.put(new float[][] { aValues, mValues });
} catch (InterruptedException e) {
}
}
}
@Override
public void …Run Code Online (Sandbox Code Playgroud) java android blockingqueue orientation-changes android-sensors