在Delphi的画布中已知圆心坐标,半径以及一段弧的弧度,如何把这段弧画出来? (20分)

  • 主题发起人 主题发起人 笑忘书
  • 开始时间 开始时间

笑忘书

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi的画布中已知圆心坐标,半径以及一段弧的弧度,如何把这段弧画出来?
procedure Arc(X, Y, W, H, Angle, AngleLength: Integer); overload;每个值的含义?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=496985
 
无法找到该页
 
问题:各位:有谁知道Canvas.Arc(x1,y1,x2,y2,x3,y3,x4,y4)中的x1,y1,x2,y2,x3,y3,x4,y4的含义吗? ( 积分:10, 回复:6, 阅读:60 )
分类:非技术问题 ( 版主:luyear, taozhiyu )
来自:xiuguo, 时间:2001-4-9 21:46:00, ID:496985 [显示:小字体 | 大字体]

我看了半天帮助,怎么也没看懂,My English is poor!


来自:redsky.l, 时间:2001-4-10 2:57:00, ID:497178
我E文也不好,只供参改!

Use Arc to draw an elliptically curved line with the current Pen.
ARC是用当前PEN画一个椭圆形的轴曲线,
The arc traverses the perimeter of an ellipse that is bounded by the points (X1,Y1) and (X2,Y2).
曲线通过椭圆形的周长,连接点(X1,Y1) 和 (X2,Y2)。
The arc is drawn following the perimeter of the ellipse, counterclockwise, from the starting point to the ending point.
ARC是反时针方向从起点到终点画弧线的。
The starting point is defined by the intersection of the ellipse and
a line defined by the center of the ellipse and (X3,Y3).
起始点的定义是:一根经过椭圆中心和(X3,Y3)点的线和椭圆的交叉点
The ending point is defined by the intersection
of the ellipse and a line defined by the center of the ellipse and (X4, Y4).
终点的定义是:一根经过椭圆中心和(X4,Y4)点的线和椭圆的交叉点







来自:xiuguo, 时间:2001-4-10 8:16:00, ID:497234
关键是这句话如何理解:
曲线通过椭圆形的周长,连接点(X1,Y1) 和 (X2,Y2)。

比如在在一个image中画一个半圆,怎么实现?




来自:xiuguo, 时间:2001-4-10 8:33:00, ID:497261
还是我自己找到答案了!
Arc Arc(x1,y1,x2,y2,x3,y3,x4,y4 : Integer);

Arc方法在椭圆上画一段弧,椭圆由(x1,y1),(x2,y2) 两点所确定的椭圆所决

定。弧的起点是椭圆圆周和椭圆中心与(x3,y3)连线的交点。弧矩形终点是椭

圆圆周和椭圆中心与(x4,y4)连线的交点,以逆时针方向画弧。



来自:xiuguo, 时间:2001-4-10 8:33:00, ID:497262
接受答案了.


来自:xiuguo, 时间:2001-4-10 8:48:00, ID:497297
画半圆方法:
w:=imagearc.width;
h:=imagearc.height;
imagearc.Canvas.Arc(0,w div 2,w,h*3 div 2,w,h,0,h);


来自:redsky.l, 时间:2001-4-10 12:48:00, ID:497761
<<椭圆由(x1,y1),(x2,y2) 两点所确定的椭圆所决定
两点不能确定一个椭圆,不过可以这样理解



得分大富翁:redsky.l
 
Use Arc to draw an elliptically curved line with the current Pen.
ARC是用当前PEN画一个椭圆形的轴曲线,
The arc traverses the perimeter of an ellipse that is bounded by the points (X1,Y1) and (X2,Y2).
曲线通过椭圆形的周长,连接点(X1,Y1) 和 (X2,Y2)。
The arc is drawn following the perimeter of the ellipse, counterclockwise, from the starting point to the ending point.
ARC是反时针方向从起点到终点画弧线的。
The starting point is defined by the intersection of the ellipse and
a line defined by the center of the ellipse and (X3,Y3).
起始点的定义是:一根经过椭圆中心和(X3,Y3)点的线和椭圆的交叉点
The ending point is defined by the intersection
of the ellipse and a line defined by the center of the ellipse and (X4, Y4).
终点的定义是:一根经过椭圆中心和(X4,Y4)点的线和椭圆的交叉点

Arc Arc(x1,y1,x2,y2,x3,y3,x4,y4 : Integer);

Arc方法在椭圆上画一段弧,椭圆由(x1,y1),(x2,y2) 两点所确定的椭圆所决

定。弧的起点是椭圆圆周和椭圆中心与(x3,y3)连线的交点。弧矩形终点是椭

圆圆周和椭圆中心与(x4,y4)连线的交点,以逆时针方向画弧。

画半圆方法:
w:=imagearc.width;
h:=imagearc.height;
imagearc.Canvas.Arc(0,w div 2,w,h*3 div 2,w,h,0,h);


来自:redsky.l, 时间:2001-4-10 12:48:00, ID:497761
<<椭圆由(x1,y1),(x2,y2) 两点所确定的椭圆所决定
两点不能确定一个椭圆,不过可以这样理解
 
人在边缘 (2001-9-24 22:03:00)
呵呵!你们领导一定是“图象处理的@@狂”!
开个玩笑!助人为乐!不要Cry了!

一个小的Bezier曲线运用单元,用来画圆弧的(如:圆,椭圆等等)

type
T2DPoint = packed record
X, Y: Double;
end;

procedure EllipseEx(DC: hDC; X, Y, A, B, Angle: Double; N: Integer);
var
P: array of T2DPoint;
Q: array of TPoint;
Alpha, Beta: Double;
SinA, CosA: Double;
Temp: Double;
I, J, K: Integer;
begin
if N < 2 then N := 2;
Alpha := Pi/N;
Beta := 4 * (1-Cos(Alpha)) / (3*Sin(Alpha));
SetLength(P, N*3+1);
for I := 0 to N-1 do
begin
Temp := I * (2*Alpha);
CosA := cos(Temp);
SinA := sin(Temp);
K := I*3;
if K = 0
then J := N*3-1
else J := K-1;
P[K].X := A * CosA;
P[K].Y := B * SinA;
SinA := Beta * A * SinA;
CosA := Beta * B * CosA;
P[J].X := P[K].X + SinA;
P[J].Y := P[K].Y - CosA;
P[K+1].X := P[K].X - SinA;
P[K+1].Y := P[K].Y + CosA;
end;
P[N*3] := P[0];
CosA := cos(Angle);
SinA := sin(Angle);
SetLength(Q, N*3+1);
for i := Low(P) to High(P) do
begin
Q.X := Round(P.X*CosA - P.Y*SinA +X);
Q.Y := Round(P.X*SinA + P.Y*CosA +Y);
end;
BeginPath(DC);
PolyBezier(DC, Q, High(Q)+1);
EndPath(DC);
StrokeAndFillPath(DC);
end;


 
多人接受答案了。
 
后退
顶部