저는 베 지어 커브와 관련된 개인 프로젝트를 진행하고 있습니다. 저는 2 차 곡선과 3 차 곡선을 개별적으로 처리하는 많은 구현을 보았습니다. 그러나 커브의 차수를 늘리거나 줄여 제어점을 추가하고 제거 할 수있는 좀 더 일반화 된 알고리즘을 만들려고합니다.다른 차수 (순서)의 베 지어 곡선 간의 변환
이것은 내 주요 질문의 일부는 아니지만 누구나 볼 수있는 일반화 알고리즘의 예를 알고 있다면 그 방향을 지적 할 수 있다면 고맙겠습니다.
우선 저차 곡선에서 고차 곡선으로의 변환은 근사값이며 이에 상응하는 값이 아니라는 것을 이해합니다. 나는 "충분히 가깝게"계산적으로 만족합니다.
둘째, 고차에서 저차 곡선으로 내려갈 때 정보가 손실된다는 사실을 알고 있습니다. 상위 차수 곡선의 곡선이 더 커지므로 낮은 차수 곡선은 근사치를 구할 수 없으므로 피할 수없는 현상입니다.
원하는 기능을 위해 곡선 내 제어점을 더하거나 뺄 필요가 있기 때문에 이러한 제한이 있습니다.
내 첫 번째 질문이 일에 관련되어 5 년 전 약 질문 : Convert quadratic curve to cubic curve
, 2 차 곡선 세 (3) 제어 지점이 있습니다
Vector3 Start;
Vector3 Control1;
Vector3 End;
우리가 소개 입방로 변환 제 4 제어 포인트 ...
Vector3 Control2;
... "사이"Control1과 End. 다음과 같이 Control1과 Control2를 설정합니다.
Control2 = new Vector3(
End.x + ((2.0f/3.0f) * (Control1.x - End.x)),
End.y + ((2.0f/3.0f) * (Control1.y - End.y)),
End.z + ((2.0f/3.0f) * (Control1.z - End.z))
);
Control1 = new Vector3(
Start.x + ((2.0f/3.0f) * (Control1.x - Start.x)),
Start.y + ((2.0f/3.0f) * (Control1.y - Start.y)),
Start.z + ((2.0f/3.0f) * (Control1.z - Start.z))
);
정확하지 않을 수도 있습니다. 이 예에서는 'x'구성 요소 만 설정되었습니다. 나는 그것으로부터 'y'와 'z'를 단지 외삽했다. 이것이 올바르지 않다면, 나는 옳은 것이 무엇인지 아는 것에 감사 할 것입니다.
이 예제는 2 차 곡선에서 3 차 곡선으로의 변환에 대해서만 설명합니다. 제어 값은 좌표 설정에서 (2.0f/3.0f)로 나타납니다. 그렇다면 3 차에서 4 차로의 변환은 (2.0f/4.0f) 또는 (3.0f/4.0f) 또는 완전히 다른 것입니까? 임의의 곡선 순서에 대해이 변환에 대해 적절하게 일반화 된 함수는 무엇입니까?
내 프로젝트 또한 스플라인을 사용하여 작업 할 예정입니다. 나는 가장자리가 임의로 정렬 된 커브 1 (a 라인)에서 n으로 정의되는 내 스플라인을 구성하기 위해 edge to edge 메서드를 사용합니다. 여기서 제어 포인트 목록의 첫 번째 및 마지막 Vector3은 모서리 및 연결 모서리는 이전 모서리의 끝점을 다음 모서리의 시작점과 공유합니다.
베 지어 곡선과 달리 제어점을 더하거나 뺍니다. 대신 가장자리를 나누고 결합합니다. 원래 커브를 근사하는 2보다 작지 않은 두 개의 하위 차수 곡선으로 커브를 세분화하는 좋은 방법은 무엇입니까? 마찬가지로 두 개의 곡선을 하나의 고차 곡선으로 결합하는 좋은 방법은 무엇입니까?
나는 이것이 하나의 글에서 많은 질문을한다는 것을 깨닫는다.하지만 나는 그것을 나누는 것보다는 하나의 주제로 함께 생각하는 것이 더 좋다고 느꼈다.
도움 주셔서 감사합니다.
감사합니다. 마이크. 나는 이것이 정확히 내가 무엇을 찾고 있다고 생각한다. – memBrain
기본적으로 대답이기 때문에 대답으로 바꾸어 봅시다. –