求助 Canvas.Arc如何用起点,终点,还有 ( R或者圆心) 画圆弧
delphi吧
全部回复
仅看楼主
level 10
想在image组件上画个模拟设备运行位置的图形
已知起点,终点,圆心,R都已经知道,能否有直接的命令就能画这段圆弧。
acr有个 起始弧度,终点弧度,R和圆心的命令,还有其他能实现的指令吗
2017年05月20日 11点05分 1
level 10
已经解决了,换了个思路用画椭圆的arc画圆弧。
procedure shuchu_arc(r,zero_x,zero_y,star_x,star_y,end_x,end_y:integer);
//(R=半径,zero_x=圆心x,zero_y=圆心y,star_x=起点x,star_y=起点y,end_x=终点x,end_y=终点y,逆时针画弧)
var
m1,m2,m3,m4,origin_x,origin_y:Integer;
begin
origin_x:=trunc(Form1.image3.Width/2); //重新定义原点
origin_y:=trunc(Form1.image3.Height/2);
zero_x :=origin_x+zero_x; //重新定义X坐标
zero_y :=origin_y-zero_y; //Y坐标翻转一下
star_x:=origin_x+star_x ;
star_y:=origin_y-star_y ;
end_x :=origin_x+end_x ;
end_y :=origin_y-end_y ;
m1:=zero_x-r;
m2:=zero_y-r;
m3:=zero_x+r;
m4:=zero_y+r;
ceshi('范围1='+inttostr(m1)+'/'+inttostr(m2));
ceshi('范围2='+inttostr(m3)+'/'+inttostr(m4));
ceshi('圆心='+inttostr(zero_x)+'/'+inttostr(zero_y));
ceshi('起点='+inttostr(star_x)+'/'+inttostr(star_y));
ceshi('终点='+inttostr(end_x)+'/'+inttostr(end_y));
Form1.image3.Canvas.arc(m1,m2,m3,m4,star_x,star_y,end_x ,end_y);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
shuchu_arc(100,0,0,0,100,-100,0);
//(R=半径,zero_x=圆心x,zero_y=圆心y,star_x=起点x,star_y=起点y,end_x=终点x,end_y=终点y,逆时针画弧)
end;
2017年05月20日 14点05分 2
level 10
[泪][泪][泪][泪]数据太精确的画不出来,此路不通,看来只能n多的直线拼出这个圆弧来了
2017年05月20日 15点05分 3
你可以用N个圆弧拼
2017年05月21日 02点05分
@BambooCaep 用了n个直线拼的
2017年05月21日 09点05分
2017年05月21日 09点05分
level 10
2017年05月21日 09点05分 4
1