문제

나는 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에서만했던 것처럼 약간의 조정이 필요할 수 있지만 기본적으로는입니다.

좋아, TTF 윤곽선이 2 차 B- 스플라인으로 정의 된 것 같습니다.

친숙하고 싶은 두 가지 알고리즘이 있습니다.

첫 번째는 매듭 삽입을 통한 Bezier 추출입니다. 이렇게하면 2 차 베 지어 세그먼트가 제공됩니다. 그런 다음 각 Bezier 세그먼트를 학위하여 입체품을 얻고 싶을 것입니다.

내가 사용하는 주요 참조는 온라인 인 CAGD 클래스 교과서입니다. Bezier 추출이 적용됩니다 섹션 6.3. 베 지어 곡선의 정도 고도가 덮여 있습니다 섹션 2.4. 문제가 있으면 알려주세요 ..

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top