谁有画五角星的函数????????????分多多的

wh_mimi 2003-10-16 02:27:15
谁有画五角星的函数????????????分多多的

给定一个中心原点,和五角星的大小
...全文
647 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wantsinewy 2004-03-23
  • 打赏
  • 举报
回复
这个行不?
var
trim: array [0..10, 0..1] of Single;

procedure TNForm.InitTrim;
var
i: Integer;
begin
// 生成一个五角星形状的裁剪曲线,注意:要保证裁剪曲线是封闭的
for i := 0 to 10 do
begin
if Odd(i) then
begin
trim[i,0] := 0.5 * cos(36*i*pi/180) + 0.5;
trim[i,1] := 0.5 * sin(36*i*pi/180) + 0.5;
end
else begin
trim[i,0] := 0.25 * cos(36*i*pi/180) + 0.5;
trim[i,1] := 0.25 * sin(36*i*pi/180) + 0.5;
end;
end;
end;
procedure TNForm.FormPaint(Sender: TObject);
begin
gluBeginTrim(nurb);
// 绘制一个分段线性的曲线用于从曲面上裁剪出一个星形形状来
gluPwlCurve(nurb, 11, @trim, 2, GLU_MAP1_TRIM_2);
gluEndTrim(nurb);
end;
zytangzhou 2004-03-18
  • 打赏
  • 举报
回复
up
Hewin 2003-10-25
  • 打赏
  • 举报
回复
unit StarobjectU;

interface
uses Graphics,Types ;
type
TPoint3 =array[0..2] of Tpoint ;
TPoint5 =array[0..4] of Tpoint ;
TFiveStar = class
private
FBitmap: TBitmap;
FRealOFFSet: Double;
FRadius: Integer;
FColor: TColor;
FgraynessColor : Tcolor ;
FContrast: integer;
FBackColor: TColor;
FLongpoints : TPoint5 ;
FShortpoints : TPoint5 ;
FShortR : Double ;
procedure SetColor(const Value: TColor);
procedure SetOFFSet(const Value: integer);
procedure SetRadius(const Value: Integer);
function GetOffset: integer;
procedure SetContrast(const Value: integer);
procedure ChangegraynessColor ;
procedure SetBackColor(const Value: TColor);
function GetRect: TRect;
function GetCanvas: TCanvas;
public
constructor Create;
destructor Destroy; override;
procedure Draw ;
procedure DrawToCanvas(aCanvas:TCanvas;Center:Tpoint);
procedure SaveToFile(Filename:string);
property Canvas : TCanvas Read GetCanvas;
property BackColor : TColor read FBackColor write SetBackColor;
property Radius : Integer read FRadius write SetRadius;
property OFFSet : integer read GetOffset write SetOFFSet;
property Color : TColor read FColor write SetColor;
property Contrast : integer Read FContrast write SetContrast ;
property ClipRect : TRect Read GetRect ;
end;
implementation

uses color;

{ TFiveStar }

{ TFiveStar }

procedure TFiveStar.ChangegraynessColor;
var
aRGB : TRGBColor ;
aLum : integer ;
begin
aRGB := TRGBColor.Create ;
try
aRGB.Color := FColor ;
aLum :=Round(aRGB.Lum*(1+FContrast/240)) ;
if (aLum >240) then
aRGB.Lum :=240
else
if aLum<0 then
aRGB.Lum := 0
else
aRGB.Lum := aLum ;
FgraynessColor := aRGB.Color ;
finally
aRGB.Free ;
end;
end;

constructor TFiveStar.Create;
begin
inherited ;
FBitmap := TBitmap.Create ;
Fbitmap.Width := 100 ;
Fbitmap.Height := 100 ;
Radius := 50 ;
color := clred ;
Contrast := 50;
end;

destructor TFiveStar.Destroy;
begin
FBitmap.Free ;
inherited;
end;

procedure TFiveStar.Draw;
begin
Canvas.Brush.Color := FBackColor ;
Canvas.FillRect(Canvas.ClipRect);
DrawToCanvas(Canvas,Point(FRadius,FRadius));
end;

procedure TFiveStar.DrawToCanvas(aCanvas: TCanvas; Center: Tpoint);
var
i : integer ;
procedure FullColor(aColor:TColor;p1,p2:Tpoint);
var
aps:TPoint3 ;
begin
aps[0] := Center ;
aps[1] := p1 ;
aps[2] := p2 ;
acanvas.Pen.Color := acolor ;
acanvas.Brush.Color := acolor ;
acanvas.Polygon(aps);
end;
begin
for i := 0 to 4 do
begin
FLongpoints[i].Y :=Center.Y+ Round(sin(FRealOFFSet+i*2*pi/5)*FRadius) ;
FLongpoints[i].x :=Center.x+ Round(Cos(FRealOFFSet+i*2*pi/5)*FRadius) ;
FShortpoints[i].Y :=Center.Y+ Round(sin(FRealOFFSet+pi/5+i*2*pi/5)*FShortR) ;
FShortpoints[i].x :=Center.X+ Round(Cos(FRealOFFSet+pi/5+i*2*pi/5)*FShortR) ;
end;
FullColor(FgraynessColor,FLongpoints[0],FShortpoints[0]);
FullColor(FColor,FLongpoints[1],FShortpoints[0]);
FullColor(FgraynessColor,FLongpoints[1],FShortpoints[1]);
FullColor(FColor,FLongpoints[2],FShortpoints[1]);
FullColor(FgraynessColor,FLongpoints[2],FShortpoints[2]);
FullColor(FColor,FLongpoints[3],FShortpoints[2]);
FullColor(FgraynessColor,FLongpoints[3],FShortpoints[3]);
FullColor(FColor,FLongpoints[4],FShortpoints[3]);
FullColor(FgraynessColor,FLongpoints[4],FShortpoints[4]);
FullColor(FColor,FLongpoints[0],FShortpoints[4]);
end;

function TFiveStar.GetCanvas: TCanvas;
begin
Result := FBitmap.canvas ;
end;

function TFiveStar.GetOffset: integer;
begin
Result :=Round(180*FRealOFFSet/pi)
end;

function TFiveStar.GetRect: TRect;
begin
Result := Rect(0,0,2*FRadius,2*FRadius);
end;

procedure TFiveStar.SaveToFile(Filename: string);
begin
FBitmap.SaveToFile(filename);
end;

procedure TFiveStar.SetBackColor(const Value: TColor);
begin
FBackColor := Value;
end;

procedure TFiveStar.SetColor(const Value: TColor);
begin
FColor := Value;
ChangegraynessColor ;
end;

procedure TFiveStar.SetContrast(const Value: integer);
begin
FContrast := Value ;
ChangegraynessColor ;
end;

procedure TFiveStar.SetOFFSet(const Value: integer);
begin
FRealOFFSet := (Value mod 360)*pi/180 ;
end;


procedure TFiveStar.SetRadius(const Value: Integer);
begin
if FRadius = Value then Exit ;
FRadius := Value;
FShortR := FRadius*(Cos(pi/5))/2 ;
FBitmap.Width := 2*FRadius ;
fbitmap.Height := 2*FRadius ;
end;

end.

其中TRGBColor是我寫的專用來處理顏色的一個類.你可以把ChangegraynessColor方法改一下.
把FColor的R,G,B同時加FContrast得到FgraynessColor
wh_mimi 2003-10-20
  • 打赏
  • 举报
回复
我可以画出这个五角星了,但怎样用指定的颜色填充呢,我现在得到了五个顶点的坐标,上面的几位老大有例子的话发给我好了, wh_mimi@hotmail.com
sixgj 2003-10-16
  • 打赏
  • 举报
回复
一定需要函数画么?
hbqinlei 2003-10-16
  • 打赏
  • 举报
回复
我有个与这相关的例子,要的话我给你发过去!
zytangzhou 2003-10-16
  • 打赏
  • 举报
回复
这好像很简单的呀!用函数就能画出来了!只要自己有时间算一下就可以了!实在不行我帮你写函数!

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧