Vẽ Sri Yantra


11

Thử thách:

Vẽ Sri Yantra .

Làm thế nào để:

Có nhiều cách khác nhau để vẽ nó. Tất cả bao gồm nhiều bước. Nếu bạn nghĩ rằng bạn có thể vẽ nó mà không cần làm theo các bước được liên kết, hãy cuộn bên dưới để biết các yếu tố bạn phải có trong bản vẽ của mình .

Các bước hoàn chỉnh có thể được tìm thấy ở đây:

http://www.saralhindi.com/Shri_Yantra/makingsky14steps_eng.htm

( Tôi đã không sao chép chúng ở đây vì nó sẽ trở thành một câu hỏi rất dài , đây là gương archieve.org trong trường hợp liên kết đầu tiên bị sập )

Hình ảnh cuối cùng sẽ trông giống như hình dưới đây:

nhập mô tả hình ảnh ở đây

Phải có:

Về cơ bản, bất kỳ phương pháp vẽ nào bạn chọn sẽ là một câu trả lời hợp lệ với điều kiện bạn giữ được các yếu tố quan trọng nhất

  1. Số lượng các hình tam giác nên có cùng số lượng như trong hình trên (43 hình tam giác nhỏ hơn xuất phát từ sự xen kẽ của 9 hình tam giác lớn hơn)

  2. Giao lộ ba này được tôn trọng:

nhập mô tả hình ảnh ở đây

  1. Các đầu của các tam giác hướng lên chạm vào các đáy của 4 tam giác hướng xuống và các đỉnh của các tam giác hướng xuống sẽ chạm vào các đáy của 3 tam giác hướng lên như trong hình dưới đây.

    nhập mô tả hình ảnh ở đây

  2. Vòng tròn bên trong (bindu) đồng tâm với vòng tròn bên ngoài.

  3. Các đầu (đỉnh) của các hình tam giác lớn hơn sẽ chạm vào vòng tròn bên ngoài: nhập mô tả hình ảnh ở đây

  4. Hình ảnh cuối cùng phải có tất cả các yếu tố và thường trông giống như: nhập mô tả hình ảnh ở đây

  5. Màu sắc phải gần giống với hình ảnh trên cho mọi yếu tố (bao gồm cả cánh hoa).

  6. Hình dạng của các cánh hoa tốt nhất nên trông gần giống như trong hình ảnh bên dưới, nhưng cũng có thể chỉ là hình bán nguyệt hoặc phần vòng cung đơn giản của vòng tròn:

  7. Không có giới hạn tỷ lệ nghiêm ngặt đối với các vòng tròn hoặc kích thước của các cổng, nhưng vòng tròn bên ngoài nhất phải có đường kính không nhỏ hơn 90% của cạnh bên ngoài, các yếu tố khác sẽ được sắp xếp tương ứng theo tỷ lệ này.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Ngôn ngữ lập trình và kết quả

Không có giới hạn đối với ngôn ngữ lập trình cũng như định dạng của kết quả (nó có thể là hình ảnh vector, hình ảnh bitmap, canvas, v.v.) miễn là kết quả tương đối rõ ràng và rõ ràng (ít nhất là 800px X 800px)

Chỉnh sửa Latter: Không có phương pháp vẽ hoàn hảo nào vì blog này khám phá chúng rất tốt: http://fotthewuk.livejournal.com/ Nếu tính đến điều đó, các lỗi nhỏ sẽ được chấp nhận.

Tại thời điểm này, đây là một bài tập thú vị để biết rằng rất có thể là không có giải pháp hoàn hảo, giống như bình phương của vòng tròn.


3
Tôi nghĩ bạn sẽ cần xác định bảng màu, tỷ lệ chiều dài có liên quan của các vòng tròn bên ngoài và nền và hình dạng của cánh hoa.
Martin Ender

@ MartinBüttner Tôi đã xem lại câu hỏi, xin vui lòng cho tôi biết nếu thông tin tốt hơn bây giờ. Vẽ Yantra này không phải là một thử thách dễ dàng và việc đặt các thông số kỹ thuật cũng là một thử thách nhỏ
Eduard Florinescu 16/12/14

Xin chào, tôi biết thông số kỹ thuật rất khó khăn về điều này. Nhưng nó là bắt buộc. Câu hỏi tương tự gần đây của tôi cũng được đưa ra một thời gian khó khăn vì thông số kỹ thuật, vì vậy tốt hơn là bạn nên đưa ra một câu hỏi vì không có điều đó, điều này quá khó để rút ra và thực tế không phải là một thách thức thực sự.
Trình tối ưu hóa

5
Thử thách này thật điên rồ.
AL

1
Cảm ơn, mặc dù đã tìm ra rồi;) Và chết tiệt .. điều này thật khó khăn, Chỉ có các hình tam giác được thực hiện và mã của tôi đã rất lớn rồi. Tối ưu hóa nó ngay bây giờ xD
Teun Pronk

Câu trả lời:


8

Toán học - 2836 2536 ký tự

Đó là một chút chóng mặt để tìm ra các combo của các khu vực làm cho hình tam giác nhỏ có sẵn để tô màu.

Khung

Các đối tượng khung là bất đẳng thức mô tả như các vùng. Ví dụ, sò đỏ và vàng là hai vùng của vòng tròn.

n1=8;n2=16;
w8=Round[.78 Table[{Cos[2\[Pi] k/n1],Sin[2\[Pi] k/n1]},{k,0,n1-1}],.01];
w16=Round[1 Table[{Cos[2\[Pi] k/n2],Sin[2\[Pi] k/n2]},{k,0,n2-1}],.01];
n=12;y1=.267;
x2=1/Sqrt[2];w=1.8;v=1.85;
pts={{-w,w},{-w/4,w},{-w/4,w+w/8},{-5w/8,w+w/8},{-5w/8,w+5w/24},{5w/8,w+5w/24},{5w/8,w+w/8},{w/4,w+w/8},{w/4,w},
{w,w},{w,w/4},{w+w/8,w/4},{w+w/8,5w/8},{w+5w/24,5w/8},{w+5w/24,-5w/8},{w+w/8,-5w/8},{w+w/8,-w/4},{w,-w/4},
{w,-w},
{w/4,-w},{w/4,-w-w/8},{(5 w)/8,-w-w/8},{(5 w)/8,-w-(5 w)/24},{-((5 w)/8),-w-(5 w)/24},{-((5 w)/8),-w-w/8},{-(w/4),-w-w/8},{-(w/4),-w},{-w,-w},

{-w,-w/4},{-w-w/8,-w/4},{-w-w/8,-5w/8},{-w-5w/24,-5w/8},{-w-5w/24,5w/8},{-w-w/8,5w/8},{-w-w/8,w/4},{-w,w/4}
};

frame=RegionPlot[{
(*MeshRegion[pts2,Polygon[Range[20]]],*) (*orange trim *)
MeshRegion[pts,Polygon[Range[Length[pts]]]], (*green box *)
ImplicitRegion[x^2+y^2<2.8,{x,y}], (*white, largest circle *)
ImplicitRegion[Or@@(((x-#)^2+(y-#2)^2<.1)&@@@w16),{x,y}], (*yellow scallops*)
ImplicitRegion[x^2+y^2<1,{x,y}],(*white circle *)
ImplicitRegion[x^2+y^2<1.4,{x,y}],(*white disk*)
ImplicitRegion[Or@@(((x-#)^2+(y-#2)^2<.15)&@@@w8),{x,y}],(*red scallops*)
ImplicitRegion[x^2+y^2<1,{x,y}] , (*white disk *)
ImplicitRegion[1.8 < x^2+y^2< 2.2,{x,y}] ,(*brown outer rim*)
ImplicitRegion[2.4 < x^2+y^2< 2.8,{x,y}](*yellow outer rim*)},
BoundaryStyle->Directive[Thickness[.005],Black],
AspectRatio->1,
Frame-> False,
PlotStyle->{(*Lighter@Orange,*)
Darker@Green,White,Yellow,White,White,
Red,White,Lighter@Brown,Yellow,Red,
White,White,White,White,White,
White,White,Red,Red,Darker@Blue,
Darker@Blue,Darker@Blue,Darker@Blue,Darker@Blue,Darker@Blue,
Red,Red,Darker@Blue,Red,Yellow,Red}];

Sau đó, có một đĩa để ẩn một số vòng tròn đã được sử dụng để làm cho sò điệp.

Graphics[{White,Disk[{0,0},.99]}]

Nhà trọ

Một số định nghĩa về đỉnh và hình tam giác. Mỗi tam giác, t1, t2, ... là một vùng riêng biệt. Các phép toán logic ( RegionUnion. RegionIntersection, Và RegionDifference) trên các hình tam giác lớn được sử dụng để xác định các ô nhỏ hơn, hình tam giác là các vùng dẫn xuất có thể được tô màu riêng lẻ.

p1={-Cos[ArcTan[.267]],y1};
p2={Cos[ArcTan[.267]],y1};
p3={-Cos[ArcTan[.267]],-y1};
p4={Cos[ArcTan[.267]],-y1};
p5={-x2,(x2+y1)/2};
p6={x2,(x2+y1)/2};
p7={-x2,-(x2+y1)/2};
p8={x2,-(x2+y1)/2};
p9={0.5,-x2};
p10={-0.5,-x2};
p11={0.5,-x2};
p12={-0.5,-x2};
p13={a=-.34,b=-.12};
p14={-a,b};
p15={0.5,x2};
p16={-0.5,x2};  
t1=MeshRegion[{{0,-1},p1,p2},Triangle[{1,2,3}]];
t2=MeshRegion[{{0,1},p3,p4},Triangle[{1,3,2}]];
t3=MeshRegion[{{0,-x2},p5,p6},Triangle[{1,3,2}]];
t4=MeshRegion[{{0,x2},p7,p8},Triangle[{1,3,2}]];
t5=MeshRegion[{{0,+y1},p9,p10},Triangle[{1,3,2}]];
t6=MeshRegion[{{0,p5[[2]]},p13,p14},Triangle[{1,3,2}]];
t7=MeshRegion[{{0,p13[[2]]},p15,p16},Triangle[{1,3,2}]];
t8=MeshRegion[{{0,p7[[2]]},{-.33,p1[[2]]-.12},{.33,p1[[2]]-.12}},Triangle[{1,3,2}]];
t9=MeshRegion[{{0,p3[[2]]},{z=-.23,0.063},{-z,.063}},Triangle[{1,3,2}]];

disk=Graphics[{White,Disk[{0,0},.99]}];


innards=RegionPlot[{
t1,t2,t3,t4,t5,t6,t7,t8,t9,(*White*)
RegionDifference[t1,RegionUnion[t5,t4,t2]],(*Blue*)
RegionDifference[t4,RegionUnion[t1,t3,t5]],(*red*)
RegionDifference[t3,RegionUnion[t7,t4,t2]], (*blue*)
RegionDifference[t2,RegionUnion[t1,t7,t3]], (*blue*)
RegionDifference[t5,t1],   (*blue*)
RegionDifference[t4,RegionUnion[t1,t7]], (*Blue *)
RegionDifference[t7,t2],(*Blue*)
RegionDifference[t3,RegionUnion[t1,t2]],(*Blue *)
RegionDifference[t8,t2],  (* blue *)
RegionDifference[t9,t5],  (* red *)
RegionDifference[t9,t6],  (* red *)
RegionIntersection[t4,RegionDifference[t6,t1]], (*blue*)
RegionIntersection[t6,RegionDifference[t5,t8]],  (* red *)
RegionIntersection[t7,t9], (*yellow*)
RegionDifference[RegionIntersection[t7,t8],t5], (*red *)
RegionDifference[RegionIntersection[t5,t6],RegionUnion[t7,t9]],(*red *)
ImplicitRegion[x^2+y^2<= .001,{x,y}],  (* smallest circle *) (* red *)
RegionDifference[RegionIntersection[t7,t1 ],t6], (*Red*)
RegionDifference[t8,RegionUnion[t5,t6]],
RegionDifference[t6,RegionUnion[t7,t8]],
RegionDifference[RegionIntersection[t2,t5],RegionUnion[t7,t8]],
RegionDifference[RegionIntersection[t7,t3],t4],
RegionDifference[RegionIntersection[t1,t3],RegionUnion[t5,t4]],
RegionDifference[RegionIntersection[t2,t4],RegionUnion[t7,t3]],
RegionDifference[RegionIntersection[t5,t4],t3]},
BoundaryStyle->Directive[Thickness[.005],Black],
AspectRatio->1,
PlotStyle->{
White,White,White,White,White,White,White,White,White,
Blue,Red,Red,Blue,Blue,Blue,Blue,Blue,Blue,
Red,Red,Blue,Red,Yellow,Red,Red,Red,Blue,Blue,Blue,Blue,Red,Red,Red,Red}]

Đặt các bộ phận lại với nhau

Show[frame,disk,innards,Graphics[{Brown,Thickness[.02],Line[Append[pts,{-w,w}]]}];
Graphics[{RGBColor[0.92,0.8,0.],Thickness[.015],Line[Append[pts,{-w,w}]]}]]

sri4


Chơi gôn

r=ImplicitRegion;m=MeshRegion;t=Triangle;d=RegionDifference;u=RegionUnion;i=RegionIntersection;(*s=ImplicitRegion*)

n1=8;n2=16;w8=.78 Table[{Cos[2\[Pi] k/n1],Sin[2\[Pi] k/n1]},{k,0,n1-1}];
w16=Table[{Cos[2\[Pi] k/n2],Sin[2\[Pi] k/n2]},{k,0,n2-1}];n=12;y1=.267;x2=1/Sqrt[2];w=1.8;v=1.85;
pts={{-w,w},{-w/4,w},{-w/4,w+w/8},{-5w/8,w+w/8},{-5w/8,w+5w/24},{5w/8,w+5w/24},{5w/8,w+w/8},{w/4,w+w/8},{w/4,w},
{w,w},{w,w/4},{w+w/8,w/4},{w+w/8,5w/8},{w+5w/24,5w/8},{w+5w/24,-5w/8},{w+w/8,-5w/8},{w+w/8,-w/4},{w,-w/4},
{w,-w},{w/4,-w},{w/4,-w-w/8},{(5 w)/8,-w-w/8},{(5 w)/8,-w-(5 w)/24},{-((5 w)/8),-w-(5 w)/24},{-((5 w)/8),-w-w/8},{-(w/4),-w-w/8},{-(w/4),-w},{-w,-w},
{-w,-w/4},{-w-w/8,-w/4},{-w-w/8,-5w/8},{-w-5w/24,-5w/8},{-w-5w/24,5w/8},{-w-w/8,5w/8},{-w-w/8,w/4},{-w,w/4}};

frame=RegionPlot[{
m[pts,Polygon[Range[Length[pts]]]], 
r[x^2+y^2<2.8,{x,y}], 
r[Or@@(((x-#)^2+(y-#2)^2<.1)&@@@w16),{x,y}], 
r[x^2+y^2<1,{x,y}],
r[x^2+y^2<1.4,{x,y}],
r[Or@@(((x-#)^2+(y-#2)^2<.15)&@@@w8),{x,y}],
r[x^2+y^2<1,{x,y}] , 
r[1.8 < x^2+y^2< 2.2,{x,y}] ,
r[2.4 < x^2+y^2< 2.8,{x,y}]},
BoundaryStyle->Directive[Thickness[.003],Black],
AspectRatio->1,
Frame-> False,
PlotStyle->{Darker@Green,White,Yellow,White,White,Red,White,Lighter@Brown,Yellow,Red}];

c=Cos[ArcTan[y1]];
p1={-c,y1};
p2={c,y1};
p3={-c,-y1};
p4={c,-y1};
p5={-x2,(x2+y1)/2};
p6={x2,(x2+y1)/2};
p7={-x2,-(x2+y1)/2};
p8={x2,-(x2+y1)/2};
p9={0.5,-x2};
p10={-0.5,-x2};
p11={0.5,-x2};
p12={-0.5,-x2};
p13={a=-.34,b=-.12};
p14={-a,b};
p15={0.5,x2};
p16={-0.5,x2};
t1=m[{{0,-1},p1,p2},t[{1,2,3}]];
t2=m[{{0,1},p3,p4},t[{1,3,2}]];
t3=m[{{0,-x2},p5,p6},t[{1,3,2}]];
t4=m[{{0,x2},p7,p8},t[{1,3,2}]];
t5=m[{{0,+y1},p9,p10},t[{1,3,2}]];
t6=m[{{0,p5[[2]]},p13,p14},t[{1,3,2}]];
t7=m[{{0,p13[[2]]},p15,p16},t[{1,3,2}]];
t8=m[{{0,p7[[2]]},{-.33,p1[[2]]-.12},{.33,p1[[2]]-.12}},t[{1,3,2}]];
t9=m[{{0,p3[[2]]},{z=-.23,0.063},{-z,.063}},t[{1,3,2}]];

innards=RegionPlot[{
d[t1,u[t5,t4,t2]],
d[t4,u[t1,t3,t5]],
d[t3,u[t7,t4,t2]], 
d[t2,u[t1,t7,t3]], 
d[t5,t1],   
d[t4,u[t1,t7]], 
d[t7,t2],
d[t3,u[t1,t2]],
d[t8,t2],  
d[t9,t5],  
d[t9,t6],  
i[t4,d[t6,t1]], 
i[t6,d[t5,t8]],  
i[t7,t9], 
d[i[t7,t8],t5], 
d[i[t5,t6],u[t7,t9]],
r[x^2+y^2<= .001,{x,y}],   
d[i[t7,t1 ],t6], 
d[t8,u[t5,t6]],
d[t6,u[t7,t8]],
d[i[t2,t5],u[t7,t8]],
d[i[t7,t3],t4],
d[i[t1,t3],u[t5,t4]],
d[i[t2,t4],u[t7,t3]],
d[i[t5,t4],t3]},
BoundaryStyle->Directive[Thickness[.003],Black],
Frame->False,
PlotStyle->{Blue,Red,Red,Blue,Blue,Blue,Blue,Blue,Blue,
Red,Red,Blue,Red,Yellow,Red,Red,Red,Blue,Blue,Blue,Blue,Red,Red,Red,Red}];

trim=Graphics[{RGBColor[0.92,0.8,0.],Thickness[.01],Line[Append[pts,{-w,w}]]}];
trim2=Graphics[{Brown,Thickness[.02],Line[Append[pts,{-w,w}]]}];
Show[frame,Graphics[{White,Disk[{0,0},.99]}],trim2,trim,innards]

2
* bộ phận, và điều này là hoàn toàn tuyệt vời; có +1
Soham Chowdhury

Đấu tranh với các màu sắc ở đây là tốt, mặc dù vòng tròn bên trong với hình tam giác là tất cả những gì tôi có cho đến nay. Tôi có một số bắt kịp để làm;)
Teun Pronk

Teun Pronk, Nó giúp sử dụng các lớp cho khung (mọi thứ bên ngoài các hình tam giác màu xanh). Các cánh hoa giống như mặt trăng có thể đạt được bằng cách hiển thị các vòng tròn đầy đủ và phủ chúng bằng một đĩa trắng lớn trên đó hình vẽ trung tâm được hiển thị. Đối với tôi phần khó nhất là tô màu các tế bào hình tam giác bên trong.
DavidC

Giống nhau, thực sự khó khăn. Cố gắng làm việc gì đó với đệ quy nhưng không thể làm cho nó hoạt động được.
Teun Pronk

@DavidCarraher Tôi đã sửa phần tô màu. Bạn muốn một mẹo về nó?
Teun Pronk

2

Delphi [Công việc đang tiến hành]

Điều này thực sự khó khăn ..
Cho đến nay tất cả những gì tôi có là vòng tròn bên trong với các hình tam giác và mã của tôi rất lớn.
Chưa tính các ký tự, tôi biết tôi có thể tiết kiệm rất nhiều cho khoảng trắng, v.v.

Đầu tiên là

Tôi đã tạo một lớp TD T là tiền tố lớp mặc định không bắt buộc nhưng nó giúp dễ dàng thấy lớp của nó, D là viết tắt của Draw.

  TP = TPoint;
  TD = class
  private
    FCv: TCanvas;
    FC: TP;
    a:array[1..9,0..2]of TP;
    FB:TBitmap32;
    FWi: integer;
  public
    constructor Create(AC: TCanvas;CP:TP;W:integer);
    property cv: TCanvas read FCv;
    property c:TP read FC;
    property Wi:integer read FWi;
    procedure tr;
    procedure StartDrawing;
    procedure ft;          
  end;
const t=1>0;f=0>1;off=50;ic=500;

Tôi cũng đã tạo ra một TPloại, không, vì chúng không phải là tên viết tắt của tôi mà là ngắn hơn TPointvà tôi nghĩ rằng tôi sẽ sử dụng rất nhiều điểm.
tài sản Clà trung tâm của vải.
thủ tục:
StartDrawing(chưa được đổi tên) kích hoạt tất cả các chức năng vẽ cho tôi.
trlàm cho tất cả các hình tam giác trong vòng tròn (bao gồm cả hình tròn)
ftsẽ tô màu tất cả các hình tam giác.
Tôi cũng đã thực hiện một số hằng số cho đúng và sai, bù và kích thước của vòng tròn.

Chức năng và thủ tục

Qsẽ trả về điểm có 2 đường giao nhau / cắt nhau.
Có rất nhiều chức năng / thủ tục lồng nhau. Tôi không cảm thấy muốn giải thích tất cả nhưng nếu bạn tự hỏi điều gì bạn luôn có thể hỏi.

Hoàn thành lớp học

unit Unit3;
interface
Uses
  Windows,Sysutils, Classes, DateUtils, Math, Graphics, types,idglobal, gr32, gr32_polygons, GR32_Backends;
type
  TP = TPoint;
  TD = class
  private
    FCv: TCanvas;
    FC: TP;
    a:array[1..9,0..2]of TP;
    FB:TBitmap32;
    FWi: integer;
  public
    constructor Create(AC: TCanvas;CP:TP;W:integer);
    property cv: TCanvas read FCv;
    property c:TP read FC;
    property Wi:integer read FWi;
    procedure tr;
    procedure StartDrawing;
    procedure ft;
    const
      ic=500;
  end;
  const t=1>0;f=0>1;off=50;
implementation

function q(A1,A2,B1,B2:TP;out o:int16):TP;
Var
 a,b,c:Real;
 d,e:TP;
begin
 a:=A1.X*A2.Y-A1.Y*A2.X;
 b:=B1.X*B2.Y-B1.Y*B2.X;
 d:=A1.Subtract(A2);
 e:=B1.Subtract(B2);
 c:=1/((d.X*e.Y)-(d.Y*e.X));
 Result:=TP.Create(Round(((a*e.X)-(d.X*b))*c),Round(((a*e.Y)-(d.Y*b))*c));
 o:=Result.Y;
end;
constructor TD.Create(AC: TCanvas; CP:TP;W:integer);
begin
  FCv:=AC;
  FC:=CP;
  FWi:=W;
  FB := TBitmap32.Create;
  FB.SetSize(W,W);
end;

procedure TD.ft;
var
  X,Y:int32;
  procedure cl(f,g:int32;e:TColor);
  begin
    fb.Canvas.Brush.Color:=e;
    fb.Canvas.FloodFill(f,g,clBlack32, fsBorder);
  end;
  function it(p1,p2: int32):int32;
  var i,r:int32;
  rgn:HRGN;
  begin
    r:=0;
    if fb.Pixel[x,y]<>clPurple32 then
      exit(50);
    for I := 1 to 9 do
    begin
      rgn:=CreatePolygonRgn(a[i],3,WINDING);
      if PtInRegion(rgn,p1,p2) then
        r:=r+1;
    end;
    it:=r;
  end;
begin
  Y:=c.Y;
  fb.Canvas.Brush.Color := clHighlight;
  fb.Canvas.FloodFill(1,1,clBlack32, fsBorder);
  X := c.X;
  cl(c.x-1,51,clWhite);
  for Y := 0 to fwi-1 do
    for X := 0 to fwi-1 do
      case it(x,y) of
        0,2,4,6,8:cl(x,y,clwhite);
        1,5:cl(x,y,clNavy);
        3,7:cl(x,y,clred);
      end;
end;
procedure TD.StartDrawing;
begin
  with fcv do
  begin
    Brush.Style := bsSolid;
    Brush.Color := clBtnFace;
    Ellipse(off,off,ic+off,ic+off);
    Brush.Style:=bsClear;
    tr;
    ft;
    CopyRect(ClipRect, FB.Canvas, FB.ClipRect);
    Brush.Color := clRed;
    Ellipse(c.X-10,c.Y-5,c.X+10,c.Y+15);
  end;
end;
procedure TD.tr;
const
  L=250;
var
  p1,w,v:tp;
  i:int16;
  r:TRect;
  function e(n:int16;b:boolean=f):TP;
  var r:single;
  begin
    r:=DegToRad(iif(b,n,(n*30)-90));
    Result := tp.Create(C.X +Round(L*Cos(r)),C.Y+Round(L*Sin(r)));
  end;
  function CS(Y:integer; L:boolean=t): tp;
  var
    I: integer;
  begin
    with FCv do
      if L then
      begin
        for I := 0+off to 499+off do
          if Pixels[I,Y]=0 then
            exit(TP.Create(I+1,Y));
      end
      else
        for i := 499+off downto 0+off do
          if Pixels[I,Y]=0 then
            exit(TP.Create(I-1,Y));
  end;
  procedure d(n,x,y:int16;b,c:TP);
  begin
    a[n][0]:=TP.Create(x,y);
    a[n][1]:=b;
    a[n][2]:=c;
  end;
  function Int(a,b,c,d,s1,s2:tp;h:int32):tp;
  var
    f,ww:tp;
    e:extended;
  begin
    f:=q(a,b,c,d,i);
    e:=ArcTan2(f.Y-h,f.X-c.X);
    ww:=tp.Create(C.X +ceil(500*Cos(e)),r.Bottom+ceil(500*Sin(e)));
    s2.Y:=ww.Y;
    Result:=q(f,ww,s1,s2,i);
  end;
begin
  r:=trect.Create(e(225,t),e(45,t));
  q(e(12),e(9),e(10),e(6),i);
  d(1,C.X,off+ic-1,CS(i),CS(i,f));
  q(e(12),e(8),e(9),e(6),i);
  d(2,C.X,off+1,CS(i),CS(i,f));
  w:=int(a[1][1],a[1][2],a[2][0],a[2][1],r.TopLeft,tp.Create(r.Left,0), r.Bottom);
  d(3,c.X,r.Bottom,w,tp.Create(r.Right,w.Y));
  w.Y:=r.Bottom-(w.Y-r.Top);
  d(4,c.X,r.Top,w,tp.Create(r.Right,w.Y));
  w:=int(a[1][0],a[1][1],a[4][1],a[4][2],tp.Create(r.Left,0),tp.Create(r.Bottom,0),r.Top);
  w.Y:=r.BottomRight.Y;
  v:=tp.Create(w);
  v.X := c.X+(c.X-w.X);
  d(5,c.X,a[1][1].Y,w,v);
  p1:=q(a[3][0],a[3][1],q(a[2][0],a[2][2],a[3][0],a[3][2],i),q(a[1][0],a[1][1],a[4][0],a[4][1],i),i);
  d(6,c.X,a[3][1].Y,p1,tp.Create(c.X+(c.X-p1.X),p1.Y));
  d(7,c.X,p1.Y, tp.Create(a[5][1]),tp.Create(a[5][2]));
  a[7][1].Y:=r.Top;
  a[7][2].Y:=r.Top;
  w:=q(a[6][0],a[6][1],a[7][0],a[7][1],i);
  w:=q(w,tp.Create(w.X-20,w.Y),a[4][0],a[4][1],i);
  d(8,c.X,a[4][1].Y,w,tp.Create(c.X+(c.X-w.X),w.Y));
  w:=q(a[5][0],a[5][1],a[7][0],a[7][1],i);
  w:=q(w,tp.Create(w.X-20,w.Y),a[6][0],a[6][1],i);
  d(9,c.X,a[2][1].Y,w,tp.Create(c.X+(c.X-w.X),w.Y));
  FB.Clear(clPurple32);
  FB.PenColor := clBlack32;
  fb.Canvas.Brush.Style:=bsClear;
  FB.Canvas.Ellipse(off,off,500+off,500+off);
  for I := 1 to 9 do
  begin
    p1:=a[i][0];
    w:=a[i][1];
    v:=a[i][2];
    FB.Line(p1.X,p1.Y,w.X,w.Y, fb.PenColor);
    FB.Line(p1.X,p1.Y,v.X,v.Y,fb.PenColor);
    FB.Line(v.X,v.Y,w.X,w.Y,fb.PenColor);
  end;
  FB.Canvas.Brush.Color := clYellow;
  FB.Canvas.FloodFill(c.X,c.Y,clBlack32, fsBorder);
end;
end.

Kết quả cho đến nay: (Có, tôi biết các dòng không hoàn hảo ở mọi nơi. Không thể tìm thấy vấn đề :() nhập mô tả hình ảnh ở đây
Không biết tại sao nhưng các hình tam giác không hiển thị đường viền của chúng. Mặc dù vậy, chúng làm trên bmp đã lưu của tôi.


Bất kỳ cập nhật về điều này?
Taylor Scott
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.