트루 타입 글꼴에서 b- 스플라인 좌표가 주어진 x, y 공간에 선을 그릴 수식은 무엇입니까?트루 타입 b- 스플라인 곡선에서 x, y 좌표를 구하는 공식은 무엇입니까?
답변
Truetype은 글리프 정의 내에서 bspline 곡선과 직선을 허용합니다.
다음하면 MoveTo의 일련의에이 명령을 변경하고 LineTo를의 당신이 사용할 수있는 필요한 경우
:- 암시 좌표 목록에 트루 타입 데이터를 변환합니다. 이것은 귀하의 OS가 당신을 위해 할 수있는 것입니다 (다음 코드는 Windows API를 사용합니다). 라인에 모든 좌표와 곡선 번역이
워크 (코드를 볼 수 아래 스니 플릿) :
procedure TGlyphEvaluator.EvaluateFromBuffer(Action: TGlyphEvaluatorAction); var H : TTPOLYGONHEADER; C : TTPOLYCURVE; Points : array of TPointFX; P, PE : DWORD; i, j : Integer; F : Double; PA, PB, PC : TPoint; begin SetLength(Points, 10); P := 0; repeat // Eat the polygon header Move(FBuffer[ P ], H, sizeof(H)); if H.dwType <> TT_POLYGON_TYPE then Break; // Sanity check! PE := P + H.cb; Inc(P, sizeof(H)); Points[ 0 ] := H.pfxStart; // Eat all the curve records while P < PE do begin // Get the curve record Move(FBuffer[ P ], C, sizeof(C) - sizeof(TPointFX)); Inc(P, sizeof(C) - sizeof(TPointFX)); // Get the points from the curve record if Length(Points) < C.cpfx + 1 then Setlength(Points, C.cpfx + 1); Move(FBuffer[ P ], Points[ 1 ], sizeof(TPointFX) * C.cpfx); Inc(P, sizeof(TPointFX) * C.cpfx); case C.wType of TT_PRIM_LINE: begin MoveTo(Action, Points[ 0 ].x.value, Points[ 0 ].y.value); for i := 1 to C.cpfx do LineTo(Action, Points[ i ].x.value, Points[ i ].y.value); end; TT_PRIM_QSPLINE: begin MoveTo(Action, Points[ 0 ].x.value, Points[ 0 ].y.value); PA.X := Points[ 0 ].x.value; PA.Y := Points[ 0 ].y.value; for i := 1 to C.cpfx - 1 do begin // DrawQSpline is called C.cpfx - 1 times PB.X := Points[ i ].x.value; PB.Y := Points[ i ].y.value; PC.X := Points[ i + 1 ].x.value; PC.Y := Points[ i + 1 ].y.value; if i < C.cpfx - 1 then begin PC.X := (PC.X + PB.X) div 2; PC.Y := (PC.Y + PB.Y) div 2; end; for j := 1 to 8 do begin F := j/8; LineTo(Action, Round((PA.x - 2 * PB.x + PC.x) * Sqr(F) + (2 * PB.x - 2 * PA.x) * F + PA.x), Round((PA.y - 2 * PB.y + PC.y) * Sqr(F) + (2 * PB.y - 2 * PA.y) * F + PA.y)); end; PA := PC; end; end; end; // Update last point. Points[ 0 ] := Points[ C.cpfx ]; end; MoveTo(Action, Points[ 0 ].x.value, Points[ 0 ].y.value); LineTo(Action, H.pfxStart.x.value, H.pfxStart.y.value); until P >= Longword(Length(FBuffer)); end;
이 경우 서식이 잘못된 것으로 보입니다. –
개정판에서 볼 수 있습니다. <> 문서를 제거하고 다시 삽입하면 문서가 올바르게 다시 표시되는 이유를 설명 할 수 있습니까? 바라건대 나 자신을 다시 할 수 있기를 바랍니다. –
잘 모르겠습니다. 나는 메타 사이트에 물어 봤고 누군가가 와서 그것을 고쳤다. 그들은 나의 질문이 정확한 복제물이라고 말했다. 그러나 내가 말했던 정확한 복제물을 보았을 때, 여기서 무슨 일이 일어 났는지 이해할 수 없었다. http://meta.stackexchange.com/questions/87423/code-markup-failure-case –
어느 라인 당신이 무슨 말을하는거야? ** R^2 **;에 무한히 많은 행이 있습니다.) – Blender
@Blender : B 스플라인의 제어점에 의해 정의 된 선. –
오, 제어점이 주어지면 * 스플라인을 그려야할까요? 선은 곡선과 완전히 다르므로 좀 더 명확하게 설명하겠습니다. – Blender