2010-06-09 4 views
2

폴리 라인을 제어 포인트를 드래그하여 편집 할 수있는 그래픽 응용 프로그램을 만들고 있습니다. 그러나 탄성을 부여하여 사용하기가 더 쉽도록하고 싶습니다. 제어점을 드래그 할 때, 단일 점을 이동하는 대신, 제어점이 얼마나 힘들었 느냐에 따라 그 점의 일정 거리 이내의 점도 함께 이동시켜야합니다.탄성/스네이크 라인 알고리즘

누구나 간단한 알고리즘을 알고 있습니까? 기본 요구 사항이 속도이기 때문에 매우 기초적 일 수 있습니다.

실제로 이러한 동작을 호출하는 방법을 알고 있으면 좋을 것이므로 Google에서 찾아 볼 수 있습니다. 'snaking'라인을 시도했지만 활성 윤곽선을 참조하는 것으로 보이는데 이는 내가 찾고있는 것이 아닙니다.

감사합니다.

답변

2

기본적으로 여러 점을 이동 (변형/변형)하는 방법을 찾고 있습니다.

점 x, y에 대해 dx, dy가되는 이동의 방향과 강도를 부여했다고 가정 해 봅시다.

당신의 변환은 적어도 두 개 이상의 매개 변수

  1. 는 점은 중간에 점 이후
  2. 영향을받을 것입니다있는 반경 r은 영향을 받게 될 것입니다 더 가장자리에 당신이 정의하는 방법에 감소를 보간 (선형, 정규 분포 등 ...선형 보간법 용)

다음 식에 따라 이동 것이 영향을받는 점 :

R [I] =하면 SQRT (SQR (XX [I]) + SQR (YY [I]))

그렇다면, R [i]를 < R

X [I] = X [i가] + DX * (1-R [내가]/R) Y [I] = Y [i]를 + dy * (1-r [i]/r)

이것은 선형 보간을위한 것이다. dx [i] = dx-r [i]/r

+0

감사합니다.이 로프 물리학에 대해 읽은 후에, 당신이 한 것처럼 결론에 도달했습니다. 그건 분명히 내가 뭘 찾고 있었는지 아니었다 :) 그러나, 당신이 제안한 방법에 자리입니다. 나는 다양한 반경 (이동 강도의 두 배)으로 구현했는데 꽤 잘 돌아 간다. – vhdirk

4

간단한 수준에서 간단한 도움말 형식으로이를 수행 할 수 있습니다. 숙청 경우

ooooooooo

각 정점 뻗어 경우 계약하고 격퇴하는 스프링에 의해 다른 정점에 연결되어 : 당신은 기본적으로 스프링에 의해 연결된 정점의 부하들로 구성된 문자열로 폴리 라인을 볼 수 있습니다 .

따라서 제어점을 이동하면 연결된 스프링이 확장 (늘어남) 또는 축소 (축소)됩니다. 이것은 스프링을 공유하는 모든 정점에 힘을 적용합니다. 그래서 첫 번째 꼭지점을 당겨서 왼쪽으로 가져 가면 스프링은 오른쪽 꼭지점에 힘을 가하여 더 가깝게 만듭니다. 이것은 모든 온천이 '편안함'이 될 때까지 다음 에너지로 계속됩니다.

컨트롤 포인트가 움직일 때마다 모든 버텍스/스프링으로 방정식을 풀어야하고 포인트가 '뱀'이 될 것입니다.

'Rope Physics'또는 'Cloth physics'(밧줄이 1D 천인 경우)에 대한 추가 예제가 필요한 경우 명백하게 중력을 무시하십시오.

+0

정말 고마워. 그게 내가 필요한거야. – vhdirk

+0

@ vhdirk/davbryn, 나는 이것이 당신이 필요로하는 것이 아닌지 의심 스럽습니다. 후크의 법칙은 폴리 라인의 제어점이 움직이는 방식을 모델링하지 않으며, 더 이상 조건없이 풀 수있는 방정식 세트를 설정할 수도 없습니다 (그러면 실제 동작을 결정할 것입니다). 밧줄 물리학 및 천 물리학은 중력장에서 비 신축성 소재 및/또는 외력이 가해 졌을 때 더 많이 발생합니다 (형상이 더 많이 형성됨). (imo) 너무 복잡합니다. – Unreason