2017-01-31 12 views
1

현재 스프링 수치 물리를 사용하는 소프트 바디 시스템에서 작업하고 있습니다. 내 문제는 모든 것이 현재 직선이라고합니다.제어점 수에 상관없이 B- 스플라인

"바닥은 젤리입니다."게임과 비슷한 것을 복제하려고하는데, 현재는 직선과 각진 부드러운 모서리와 변형을 제외한 모든 것이 작동합니다.

큐빅 베 지어 방정식을 사용해 보았습니다 만, 그저 3 개의 노드마다 새로운 곡선이 있음을 의미합니다. vec2의 루프에서 작동 할 n 개의 제어점을 취하는 베 지어 스플라인 (Bezier spline)에 대한 수식이 있습니까? (노드 [0]은 첫 번째이자 마지막 제어점입니다)

죄송합니다.이 코드를 보여줄 수있는 코드가 없지만 완전히 엉망이되어서 Google 검색 결과 아무 것도 표시되지 않습니다.

+0

[고유치 (https://eigen.tuxfamily.org/dox/unsupported/group__Splines__Module.html)는 스플라인 라이브러리를 갖는다. 나는 그것을 한 번 사용했고 공식적으로 지원받지 못함에도 불구하고 괜찮았다. 그러나 닫힌 커브를 지원한다고는 생각하지 않습니다. – Potatoswatter

+0

은 B- 스플라인을 구현하는 것이 실제로 모든 작업이 아니기 때문에 http://pomax.github.io/bezierinfo/#bsplines에 읽기 권한을 부여 할 수 있습니다. 또한 https://github.com/thibauts/b-spline/blob/master/index.js는 (거의) C++를 포함하여 다양한 언어에 쉽게 적용 할 수있는 JS 구현입니다 –

답변

0

단순히 "B- 스플라인 라이브러리"는 많은 참조를 제공합니다. B- 스플라인이 유일한 선택은 아닙니다. 큐빅 Hermite 스플라인 (일련의 점과 파생어로 정의 됨)을 사용할 수 있습니다 (자세한 내용은 link 참조).

한편 시스템에서 직선을 계속 사용하고 표시 목적으로 직선 정점을 보간하는 곡선을 만들 수 있습니다. 일련의 데이터 포인트를 통해 보간 곡선을 만들려면 Catmull-Rom 스플라인이 쉽게 구현할 수있는 좋은 선택입니다. 이 접근법은 실제로 시스템에서 B- 스플라인 곡선을 사용하는 것보다 더 나은 성능을 제공합니다.

+0

Catmull-Rom spline 완전하고 빠르다! 방정식을 거의 변경하지 않고 닫힌 커브로 작업했습니다! –

0

최소한의 제어점으로 부드러운 곡선을 표현할 수 있기 때문에 B- 스플라인을 사용합니다. 또한 주어진 데이터 세트에 대한 대략적인 매끄러운 표면을 찾는 것은 간단한 선형 대수학 문제입니다. 는 https://github.com/feevos/bsplines

는 제어 포인트/다중성의 임의의 수를 수용하고 당신을 줄 수 있습니다

나는 여기, 과학 계산에 사용하고 라이브러리 (뿐만 아니라 베 지어 곡선 포함) ++ 단순 B 스플라인 C를 작성했습니다 기초를 되돌려 라. 그러나 데이터에 맞는 B- 스플라인 커브를 만드는 것이 당신이해야 할 일입니다.

GNU GSL ( https://www.gnu.org/software/gsl/manual/html_node/Basis-Splines.html)에도 B- 스플라인 (그러나 베 지어 곡선 없음)이 잘 구현되어 있습니다. 여기에도 주어진 기준에 따라 2/3D가되도록 제어점을 구현하고 데이터에 맞게 경계 조건을 수정해야합니다. 여기서 폐쇄/개방 곡선 B 스플라인에서

추가 정보 : https://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/index.html