2016-09-02 15 views
0

나는 게임을 개발 중이다. 사용자는 손가락으로 화면에 커브를 그린 다음 사용자 터치 포인트를 얻습니다.사용자가 터치 한 포인트간에 부드러운 곡선을 그리는 방법은 무엇입니까?

나는이 점들 사이에 곡선을 그리고 싶습니다. 흩어져서 캔버스를 사용하고 그 사이에 선을 그리면 그 결과는 부드러운 곡선이 아닙니다.

나는이 점들을 통해 매끄러운 곡선을 그리는 방법을 찾고있다. (어쩌면 다른 점과 같은 추세가 아닌 점을 수정하거나 제거함으로써).

은 누구도 날 도와 드릴까요?

여기에 내가 어도비 포토샵과 일러스트 레이터, 추가 더 많은 포인트에서 배운 것처럼 내가

+0

[베 지어 곡선] (https://en.wikipedia.org/wiki/B%C3%A9zier_curve). 그것을 봐, 자원을 충분히 사용할 수 있습니다. "적합하지 않은"요점을 옮기거나 제거하는 것은 그 자체로 과학입니다. 요점에 대한 통계 분석이 필요합니다 ...이 단계에서는 문제가되지 않을 수도 있습니다. – ppeterka

+0

@ppeterka 감사합니다.하지만 도움이되지 않습니다. 내 게임에서 정확히 사용자 터치 경로를 그릴 필요가 있습니다. – MehDi

+0

일련의 점을 연결하기 위해 베 지어 곡선 세트를 사용하는 [splines] (https://www.particleincell.com/2012/bezier-splines/)에 대해 알아보십시오. 커브가 너무 많은 점으로 시작하는 경우 커브가 들쭉날쭉 해지면 몇 점을 희생하고 [경로 단순화 알고리즘] (http://mourner.github.io/simplify-js/)을 적용 할 수 있습니다. – markE

답변

0

을 무슨 뜻인지 보여주기 위해 picture를 추가, 더 들쭉날쭉 이미지가 보일 것이다. 그림을 그릴 때마다 다른 점이나 다른 점을 건너 뛸 수 있습니다. 이렇게하면 사용자가 빠르게 움직이는 경우 도면이 정확하지 않을 수 있으므로 건너 뛴 지점이 가깝거나 멀리 있는지 확인할 수 있습니다.

final int len = pointsX.length, far = 50; 
for (int i = 0; i < len; i++) 
{ 
    if (i % 2 == 0) //If even, draw 
    { 
     //Draw code 
    } 
    else if (Math.abs(pointsX[i] - pointsX[i-1]) > far || Math.abs(pointsY[i] - pointsY[i-1]) > far) 
    { //If the index is odd, check if the distance from the current to the last point is far. 
     //If it is far, draw. If not far, skip the draw, so it doesn't appear as jagged. 
     //Draw code 
    } 
} 
+0

고마워요, 과거에 똑같은 아이디어가 있었는데, 각 두 점의 한 점을 건너 뛰었습니다. 좋은 결과가 없었습니다. 그러나 두 점의 거리를 확인한 다음 건너 뛰기를 결정하는 아이디어는, 나중에 다시 시도해보고 결과를 알려줄 것입니다. 다른 해결책 옆에서이 접근법을 사용하는 것이 좋습니다 :) 감사합니다. (그리고 나쁜 영어로 유감입니다.) – MehDi

+0

아뇨, 도움이되지 않습니다. 어쨌든 지그재그 포인트를 수정해야합니다. – MehDi