2013-04-11 4 views
3

코드 높이가 동일한 세그먼트로 커브를 세분화하고 싶습니다. Divide Distance 도구를 사용하여 동일한 코드 길이로 나눌 수 있지만 높이 옵션을 찾을 수는 없습니다. here을 수행하는 정말 더러운 코드를 작성했습니다. (저를 판단하지 마십시오, 그것은 우아하고 비효율적이지만,이 작업을 수행합니다.) 정말 듣고 싶습니다 무엇코드 높이로 커브 나누기

Curve divided by chord height

이진 같은 것을 만들에가는 아무 소용이 없기 때문이다 검색을 수행하는 Grasshopper의 기능이 이미 있기 때문에 검색하지만 더 이상 효율적이지 않은 방법에 대한 제안이있는 사람이 있습니까?

+0

몇 개의 세그먼트가 있습니까? 그리고 교두로 당신은 무엇을 할 것입니까? – MBo

+0

세그먼트 수는 커브 곡선의 결과입니다. Cusps는 좋은 질문입니다. 적절한 수학적 솔루션이 놀라 울 것이고 그 시점에서 무한대로 갈 것이라고 상상할 수 있습니다. 그러나 반복적 인 솔루션의 일부는 주변에서 약간 불안정 해지고 정상적인 곡선으로 취급 될 것입니다. 나는 그 순간에 첨단이 없다고 말하는 것이 안전하다고 생각합니다. – Ben

답변

3

내 대답은 베 지어 곡선 코드 높이 (sagitta?)를 찾는 데 있으며, 프로세스를 세분화하지는 않습니다.

제어점 P0, P1, P2, P3을 사용하는 입방체 베 지어를 고려합니다. Sagitta는 코드 세그먼트 C = P0P3에서 최대 거리입니다. 곡선의 방향 벡터 (hodograph, 1 차 미분)가 코드 벡터와 평행 할 때 최대 거리에 도달합니다. 큐빅 베 지어 곡선의 Hodograph 제어점과 차 베지에 곡선 (Sederberg book CAGD, section 2.7)는 그들의 외적이 영일 때

D0=3(P1-P0), D1=3(P2-P1), D2=3(P3-P2) 

벡터가 평행 그래서 우리가 식

Cx*Dy-CyDx=0 or 
(P3x-P0x)*((P1y-P0y)*(1-t)^2+2*(P2y-P1y)*t*(1-t)+(P3y-P2y)*t^2) = 
(P3y-P0y)*((P1x-P0x)*(1-t)^2+2*(P2x-P1x)*t*(1-t)+(P3x-P2x)*t^2) 

이 차 방정식, 그래요 범위 [0..1]의 t에 대해 0, 1 또는 2 해를 가질 수 있습니다 (S 자 곡선의 경우 2가 가능함). 그런 다음 방정식에서 찾은 t 매개 변수에서 베 지어 곡선을 계산하고 코드까지의 거리를 계산할 수 있습니다.