n-ary b spline을 2 차 또는 입방 B- 스플라인 시퀀스로 바꿉니다.
문제
나는 Mosa (모든 C# 운영 체제 간의 상관 관계)에 대한 TTF 작업을 수행하고 있습니다. 나와 Colin Burn은 현재 일부 TTF 코드가 작동하는 작업을 수행하고 있습니다 (요즘 저의 저의 저에게 :) - 그는 많은 진전을 이루었습니다).
어쨌든 TTF 사양은 '핸들'과 사이의 임의의 양의 제어점을 허용합니다. 가스프 전혀 핸들이 없습니다 (TTF에는 원형의 예가 있습니다.
누구 든지이 일을 어떻게 할 수 있는지에 대한 포인터를 줄 수 있습니까? 나는 Wikipedia의 Bezier 기사를 보았지만 실제로 그다지 도움이되지는 않았습니다. 그들은 그것이 일어나는 것을 보여 주지만 수학을주지 않습니다. '프로그램'이 준비된 것이 도움이 될 것입니다 (내 미적분학은 그것이 무엇인지가 아닙니다) - 일부 의사 코드 또는 무언가.
감사합니다.
해결책
나는 파기를하고 일부를 발견했다 알고리즘 TTF 사양의 경우 이 사이트는 여기에 있습니다.
다른 팁
로부터 Bezier 기사 Wikipedia에서는 실용적인 미적분학 지식을 갖춘 공식을 다음 의사 C# 코드 목록과 같은 컴퓨터 프로그램으로 변환 할 수 있습니다. 나는 2 차 스플라인으로 그것을하고 있지만 다른 것으로 번역하기 쉽습니다.
// Quadratic spline, with three given points
// B(t) = (1-t)^2P(0) + 2*tP(1) + t^2P(2)
// where T is a real number in the interval [0, 1]
public void DrawQuadSpline(Point p0, Point p1, Point p2, int steps)
{
Point next = p0;
Point previous = p0;
double tStep = 1 / ((float) steps);
double t = 0;
for (int i = 0; i < steps; i++)
{
float x = CalculateQuadSpline(P0.x, P1.x, P2.x, t);
float y = CalculateQuadSpline(P0.y, P1.y, P2.y, t);
Point next = new Point(x, y);
drawLine(previous, next);
previous = next;
t = t + tStep;
}
}
private void CalculateQuadSpline(float z0, float z1, float z2, float t)
{
return (1.0-t)*(1.0-t)*z0 + 2.0*t*z1 + t*t*z2;
}
이전에 Java에서만했던 것처럼 약간의 조정이 필요할 수 있지만 기본적으로는입니다.
제휴하지 않습니다 StackOverflow