如何画出长半轴与水平线任意角度的椭圆?
用API函数能否实现?最好不要描点画,效率高一点!
用API函数能否实现?最好不要描点画,效率高一点!
解决方案 »
- 哪位大人给个delphi7.1的下载地址好嘛?
- 新手请教一个问题,标题很难说明白请好心人进来
- sql简单查询,马上结帖。
- 试问:ADO连接数据库奇怪的错误?
- 谁有《Delphi 6电子商务应用开发》的电子版?
- 过年啦,领分啦,风云公开测试啦......集信息管理,多媒体播放(FLASH,影视,歌曲),图片浏览,网页浏览于一体的...Faint,先用用再说
- 如何获取c#返回的字符串
- 一个关于表中记录使用的问题???????请求高手帮忙!!!!!!!!
- 如何使用DELPHI编写陷阱程序
- 没法SHOW出窗口了?????????
- “贺岁华东行”--与技术总监和Borland产品专家面对面2004元旦
- 如何写程序测试SQL服务器是否存在?急急急....
//and MoveTo and LineTo
//Example
procedure TForm1.FormPaint(Sender: TObject);
var
R: TRect;
begin
R := GetClientRect; {Gets the boundaries of the current window}
Canvas.Arc(R.Left, R.Top, R.Right, R.Bottom, R.Right, R.Top, R.Left, R.Top);
end;
const
r: Double = 0.2761423749154; Center为椭圆中心、mb为短半轴、ma为长半轴
得到13个点
P[0].x := Center.x;
P[0].y := Center.y + mb;
P[1].x := Center.x + 2 * ma * r;
P[1].y := Center.y + mb;
P[2].x := Center.x + ma;
P[2].y := Center.y + 2 * mb * r;
P[3].x := Center.x + ma;
P[3].y := Center.y;
P[4].x := Center.x + ma;
P[4].y := Center.y - 2 * mb * r;
P[5].x := Center.x + 2 * ma * r;
P[5].y := Center.y - mb;
P[6].x := Center.x;
P[6].y := Center.y - mb;
P[7].x := Center.x - 2 * ma * r;
P[7].y := Center.y - mb;
P[8].x := Center.x - ma;
P[8].y := Center.y - 2 * mb * r;
P[9].x := Center.x - ma;
P[9].y := Center.y;
P[10].x := Center.x - ma;
P[10].y := Center.y + 2 * mb * r;
P[11].x := Center.x - 2 * ma * r;
P[11].y := Center.y + mb;
P[12].x := Center.x;
P[12].y := Center.y + mb;旋转,旋转中心是Center, mCosAlpha, mSinAlpha,为旋转角的Cos,Sin值
for i := 0 to 12 do P[i] := ThisDxf.Rotate(Center, P[i], mCosAlpha, mSinAlpha);
ThisDxf.DxfCanvas.PolyBezier(P);
const
r: Double = 0.2761423749154; Center为椭圆中心、mb为短半轴、ma为长半轴
得到13个点
P[0].x := Center.x;
P[0].y := Center.y + mb;
P[1].x := Center.x + 2 * ma * r;
P[1].y := Center.y + mb;
P[2].x := Center.x + ma;
P[2].y := Center.y + 2 * mb * r;
P[3].x := Center.x + ma;
P[3].y := Center.y;
P[4].x := Center.x + ma;
P[4].y := Center.y - 2 * mb * r;
P[5].x := Center.x + 2 * ma * r;
P[5].y := Center.y - mb;
P[6].x := Center.x;
P[6].y := Center.y - mb;
P[7].x := Center.x - 2 * ma * r;
P[7].y := Center.y - mb;
P[8].x := Center.x - ma;
P[8].y := Center.y - 2 * mb * r;
P[9].x := Center.x - ma;
P[9].y := Center.y;
P[10].x := Center.x - ma;
P[10].y := Center.y + 2 * mb * r;
P[11].x := Center.x - 2 * ma * r;
P[11].y := Center.y + mb;
P[12].x := Center.x;
P[12].y := Center.y + mb;旋转,旋转中心是Center, 旋转角的Cos,Sin值mCosAlpha, mSinAlpha
for i := 0 to 12 do
begin
X := P[i].x - Center.x;
Y := P[i].y - Center.y; P[i].x := X * CosAlpha - Y * SinAlpha + Center.x;
P[i].y := X * SinAlpha + Y * CosAlpha + Center.y;
end; 画Bezier曲线
ThisDxf.DxfCanvas.PolyBezier(P); 以上方法误差只有0.03%速度很快