procedure AAABBB(canvas:TCanvas;Left,Top,Width,Height:integer);
var
Right,Bottom:integer;begin
Right:=Left+width;
Bottom:=Top+Height; Canvas.Pen.Width:=1;
Canvas.Pen.Color:=clwhite; Canvas.MoveTo(Right,Top);
Canvas.lineTo(Left,Top); Canvas.LineTo(Left,bottom); Canvas.Pen.Color:=clgray; Canvas.lineTo(Right,Bottom);
Canvas.lineTo(Right,Top);
end;//==================================
调用: AAABBB(form1.Canvas,20,20,85,85);以上只能画一个矩形,我想画下面的形状,怎样画?
_______
/ \
| |
| |
\_______/
var
Right,Bottom:integer;begin
Right:=Left+width;
Bottom:=Top+Height; Canvas.Pen.Width:=1;
Canvas.Pen.Color:=clwhite; Canvas.MoveTo(Right,Top);
Canvas.lineTo(Left,Top); Canvas.LineTo(Left,bottom); Canvas.Pen.Color:=clgray; Canvas.lineTo(Right,Bottom);
Canvas.lineTo(Right,Top);
end;//==================================
调用: AAABBB(form1.Canvas,20,20,85,85);以上只能画一个矩形,我想画下面的形状,怎样画?
_______
/ \
| |
| |
\_______/
{
pDC->MoveTo(pPoints[0]);
fPoint fPointBezier;
for(int i = 0; i < nSegments; i++)
{
BezierComputePoint(i / (float)nSegments, &fPointBezier, pPoints);
pDC->LineTo(ROUND(fPointBezier.x), ROUND(fPointBezier.y));
}
pDC->LineTo(pPoints[3]);
}void BezierComputePoint(float fU, fPoint* pDstPoint, CPoint* pSrcPoints)
{
//
// Add up all the blending functions multiplied with the control points
//
float fBlend;
float f1subu = 1.0f - fU; //
// First blending function (1-u)^3
//
fBlend = f1subu * f1subu * f1subu;
pDstPoint->x = fBlend * pSrcPoints[0].x;
pDstPoint->y = fBlend * pSrcPoints[0].y; //
// Second blending function 3u(1-u)^2
//
fBlend = 3 * fU * f1subu * f1subu;
pDstPoint->x += fBlend * pSrcPoints[1].x;
pDstPoint->y += fBlend * pSrcPoints[1].y; //
// Third blending function 3u^2 * (1-u)
//
fBlend = 3 * fU * fU * f1subu;
pDstPoint->x += fBlend * pSrcPoints[2].x;
pDstPoint->y += fBlend * pSrcPoints[2].y; //
// Fourth blending function u^3
//
fBlend = fU * fU * fU;
pDstPoint->x += fBlend * pSrcPoints[3].x;
pDstPoint->y += fBlend * pSrcPoints[3].y;
}void DrawBeziers(CDC* pDC, CPoint *pPoints, int nPoints, int nSegments)
{
VERIFY(pPoints != NULL);
ASSERT(nSegments > 0);
for(int i = 0; i + 4 <= nPoints; i += 3)
{
DrawBezier(pDC, &pPoints[i], nSegments);
}
}