2010-02-23 5 views
6

김프 또는 포토샵과 같은 그래픽 편집 프로그램을 사용하면 무슨 뜻인지 알게 될 것입니다. 이러한 프로그램 (베 지어 곡선 일 수도 있음)에서 커브를 편집하려면 커브를 클릭하고 마우스를 끌면 그에 따라 커브가 변경됩니다. 나는이 메커니즘 뒤에있는 모든 것들이 벡터와 관련이 있다고 생각하지만, 어떻게해야 하는지를 언급 ​​한 문서는 찾을 수 없었다. 아무도 내가 어떻게 할 수 있는지 말해 줄 수 없습니까? 고맙습니다.베 지어 곡선을 드래그하여 편집하십시오.

[편집] 내가 말한 것은 커브 자체를 선택하여 편집 (커브를 클릭하고 커브를 드래그하여 편집)하는 것입니다. 일반적인 방법으로 커브를 변경하기 위해 제어점을 선택합니다. 커브를 변경하려면 컨트롤 포인트를 편집해야하지만 커브의 변경 내용을 컨트롤 포인트 변경에 대한 변경으로 해석하려면 어떻게해야합니까?

답변

0

끌기는 베 지어 곡선의 조절 점을 변경하기 만하면 커브가 그에 따라 다시 계산됩니다. 그들이 어떻게 작동하는지에 대한 좋은 설명은 Wikipedia을 참조하십시오.

0

무엇을 하시겠습니까? 응용 프로그램에서 베 지어 곡선을 편집 하시겠습니까? 그 뒤에있는 일반적인 수학에 관심이 있습니까?

일반적으로 베 지어 곡선을 생성하는 데 사용되는 제어점을 조작합니다.

1

편집 - 귀하의 질문에 편집에 대한 응답으로

, 내가 베 지어 곡선은 확실히 앞으로 방법이 아니다 것을 제안 제어점을 이동 곡선 자체를 선택할 수 있도록하기 위해 - 당신은 할 것 올바른 제어점 위치를 찾기 위해 역 방정식을 풀어야합니다. 어떤 경우에는 커브를 원하는 위치로 이동시키기 위해 제어점을 움직일 수없는 경우도 있습니다.

B- 스플라인을 사용하는 경우 사용자가 클릭 한 지점에서 가장 가까운 곡선의 지점에 새 제어점을 삽입 한 다음 새 제어점을 이동하기 만하면됩니다. 따라서 효과적으로 새로운 제어점을 추가 할 수 있습니다. 이미 컨트롤 포인트 (일반적으로 베 지어 세 그러나 당신이 원하는만큼 할 수있다)의 집합 주어진 점 세트를 생성 할 수 있습니다, 베 지어 곡선의 구현을 가정

원본

(일반적으로 0 >= u <= 1 파라 메트릭 방정식을 사용합니다.) 다음은 쉽습니다.

컨트롤 포인트는 커브가있는 곳을 결정하므로 선택 피드백을 구현하고 해당 컨트롤 포인트를 끌어다 놓기 만하면됩니다.

그러나 정확한 점 매칭을 찾고 있다면 베 지어 곡선은 첫 번째 및 마지막 제어점을 통과하기 때문에 이상적이지 않습니다. 그리고 커브에 더 많은 포인트를 넣을수록 정확도는 떨어집니다.

B- 스플라인은 더 좋을 것이며, 이것의 변형은 포토샵 외에서 실제로 볼 수 있습니다.

+0

베 지어를 사용하면 일치하는 제어점에 가장 근접한 점은 3 점 곡선의 문자열을 만드는 것입니다. 각 커브의 끝점은 다음 커브의 시작점과 동일하게 설정됩니다. 두 커브의 조인 포인트 중 두 개의 중간 점은 조인 포인트 주위를 비추도록 설정되어야합니다. 그러나 곡선은 중간 점을 통과하지 못합니다. –

0

좋아, 베 지어 커브는 프리미티브가있는 렌더링 라이브러리를 사용하기 때문에 사용해야한다고 가정 해 봅시다.곡선에 4 점의 각 세트, 즉 How to find control points for a BezierSegment given Start, End, and 2 Intersection Pts in C# - AKA Cubic Bezier 4-point Interpolation

을 : 당신이 곡선 자체에 제어 포인트를 사용하는 아이디어에 절대적으로 결혼 한 경우, 당신은 단지 방법이 여기에 설명 된 사용하여 제어 포인트를 보간 할 수 있습니다 위의 알고리즘을 실행하고 3 차 베 지어를 그리는 데 필요한 4 개의 제어점을 얻습니다.

3

당신이보고 싶은 것을 성취하는 방법에는 여러 가지가 있습니다. 커브 조작시 점을 통해 베 지어 곡선을 수정하는 간단한 방법을 설명하겠습니다.

먼저해야 할 일은 사용자가 곡선을 클릭 한 매개 변수 값 (t)을 파악하는 것입니다. 이것은 일반적으로 근사치가 될 것입니다. 베 지어의 픽셀 또는 하위 픽셀 렌더링을 수행하는 경우 모든 픽셀에 대해 t 값이 무엇인지 기록하고이를 사용하십시오. 선분으로 테셀레이션하는 경우 가장 가까운 선분을 확인하고 두 끝점의 t 값을 찾은 다음 선상의 거리에 따라 t 값을 lerp합니다.

일단 t 값을 얻으면 베 지어 곡선 방정식에 플러그 할 수 있습니다. 폼의 무언가로 끝날 것이다 :

P 곡선, P0, P1, P2의 시점이고, P3은 K0, K1, K2, 및 K3 입력 제어 포인트이고,
P = k0*P0 + k1*P1 + k2*P2 + k3*P3 

주어진 t에 대한 상수이다. k 값 'contribution'이라고 부르거나 더 구체적으로 제어점의 기여도를 곡선 P (t)의 점까지 호출합니다. '- P는 P,'새로운 위치이며, P는 원래의 위치 기억하기 좋은 속성은 K0 + K1 + K2 + K3는 = 1

는 자, 당신은 벡터 V = P가 있다고 가정 해 보자는 것이다. 이동해야하는 곳에서 P '를 얻으려면 제어점을 일부 이동해야하지만 이동하려는 제어점에 대해 어느 정도 유연성이 있습니다. 기여도가 0이 아닌 지점을 사용하거나 일부 조합을 사용할 수 있습니다.

사용자가 t = 0에서 곡선을 클릭한다고 가정 해 봅니다. 이 경우 k0만이 0이 아니므로

P0 := P0 + V 

이 올바른 결과를 생성합니다. 이것은 또한 공헌의 모든가 0이되는 일반적인 경우

P0 := P0 + k0 * V 

과 같이 쓸 수있다, 당신은 매우 부드러운 확산 아웃의 영향을 미칠 것이다, 점의 각각에 동일한 변환을 적용 할 수 있습니다 흉한 모습.

또 다른 옵션은 전체 기여도가 가장 큰 제어점을 간단히 이동하는 것입니다. 내가 사용하는 방정식은

Pmax := Pmax + 1/kmax * V 

처럼 뭔가있을 거라고 생각하지만 어느 쪽이든 그것은 주어진 t 값에 기여보고, 새로운 포인트가 원하는 위치에 놓여 있도록 제어점을 이동로 요약된다.

이 접근법은 상당히 일반적이며 NURBS 및 대부분의 다른 스플라인, 심지어 표면에서도 작동합니다. Greville Abscissae를 사용하여 가능한 한 많은 포인트를 고정시키는 또 다른 방법이 있지만 경험상 진동이 너무 쉽습니다. 객체 모델에 대한

0

참조 github.com/bootchk/freehandTool는

사용자는 드래그. 가장 가까운 제어점 또는 제어점 사이의 암 위에 드래그를 투영합니다. 가장 가까운 제어점의 회전 및/또는 변환 (변형)으로서 드래그를 해석합니다.복수형 참고 : 가장 가까운 것은 두 세그먼트의 일치 제어점 (끝) 또는 베 지어 세그먼트의 팔의 제어점이 될 수 있습니다.