Empate Sri Yantra

11

Desafio:

Desenhe Sri Yantra .

Como:

Existem diferentes maneiras de desenhá-lo. Todos incluem muitos passos. Se você acha que pode desenhá-lo sem seguir as etapas vinculadas, role para os elementos que você deve ter no seu desenho .

Etapas completas podem ser encontradas aqui:

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

( Eu não os copiei aqui porque se tornaria uma pergunta muito longa , aqui está o espelho do archieve.org, caso o primeiro link caia )

A imagem final deve se parecer com a imagem abaixo:

insira a descrição da imagem aqui

Deve ter:

Basicamente, qualquer método de desenho de sua escolha seria uma resposta válida, desde que você mantenha os elementos mais importantes

  1. O número de triângulos deve ter o mesmo número da figura acima (43 triângulos menores resultaram do entrelaçamento dos 9 triângulos maiores)

  2. Essas interseções triplas são respeitadas:

insira a descrição da imagem aqui

  1. As pontas dos triângulos para cima tocam as bases dos 4 triângulos para baixo e as pontas dos triângulos para baixo devem tocar as bases dos 3 triângulos para cima, como mostra a figura abaixo.

    insira a descrição da imagem aqui

  2. O círculo interno (bindu) é concêntrico com o círculo externo.

  3. As pontas (vértices) dos triângulos maiores devem tocar o círculo externo: insira a descrição da imagem aqui

  4. A imagem final deve ter todos os elementos e geralmente deve se parecer com: insira a descrição da imagem aqui

  5. A cor deve ser aproximadamente a mesma da imagem acima para cada elemento (incluindo pétalas).

  6. A forma das pétalas deve preferencialmente se parecer com a imagem abaixo, mas também pode ser apenas semicírculos ou uma simples seção de arco do círculo:

  7. Não há restrições estritas de proporção para os círculos ou o tamanho dos portões, mas o círculo mais externo deve ter o diâmetro não inferior a 90% do lado do quadrado externo, os outros elementos seriam dispostos respectivamente em relação a essas proporções.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Linguagens de programação e resultados

Não há restrições à linguagem de programação nem ao formato do resultado (pode ser uma imagem vetorial, imagem de bitmap, tela etc.), desde que o resultado seja relativamente claro e discernível (pelo menos 800px X 800px)

Última edição: Não existe um método perfeito de desenho, pois este blog os explora muito bem: http://fotthewuk.livejournal.com/ Levando isso em consideração, pequenas falhas serão toleradas.

Nesse ponto, é um exercício interessante descobrir que é muito provável que não exista uma solução perfeita, como a quadratura do círculo.

Eduard Florinescu
fonte
3
Acho que você precisará definir a paleta de cores, as escalas de comprimento relevantes dos círculos externos e o plano de fundo e a forma das pétalas.
Martin Ender
@ MartinBüttner Reeditei a pergunta, diga-me se a informação está melhor agora. Desenhar este Yantra não é um desafio fácil, e
definir
Oi, eu sei que as especificações são muito difíceis neste. Mas é necessário. Minha recente pergunta semelhante também foi dificultada por causa das especificações, então é melhor você criar uma porque, sem isso, isso é muito difícil de desenhar e praticamente não é um desafio real.
Optimizer
5
Esse desafio é louco.
AL
1
Obrigado, já entendi;) E caramba .. isso é difícil, só consegui os triângulos e meu código já é enorme. Otimizando agora xD
Teun Pronk

Respostas:

8

Mathematica - 2836 2536 caracteres

Foi um pouco estonteante descobrir os combos de regiões que disponibilizam pequenos triângulos para colorir.

A moldura

Os objetos de quadro são desigualdades que descrevem como regiões. Por exemplo, as vieiras vermelha e amarela são duas regiões de círculos.

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}];

Depois, há um disco para ocultar alguns círculos que foram usados ​​para fazer a vieira.

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

The Innards

Algumas definições de vértices e triângulos. Cada triângulo, t1, t2, ... é uma região distinta. As operações lógicas ( RegionUnion. RegionIntersectionE RegionDifference) em triângulos grandes são usadas para definir células triangulares menores como regiões derivadas que podem ser coloridas individualmente.

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}]

Juntando as peças

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


Golfe

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]
DavidC
fonte
2
* entranhas, e isso é completamente incrível; tem um +1
Soham Chowdhury
Lutando com as cores aqui também, embora o círculo interno com triângulos seja tudo o que tenho até agora. Tenho alguns recuperar o que fazer;)
Teun Pronk
Teun Pronk, ajuda a usar camadas para o quadro (tudo fora dos triângulos azuis). As pétalas em forma de lua podem ser alcançadas renderizando círculos completos e cobrindo-os com um grande disco branco no qual a figura central é renderizada. Para mim, a parte mais difícil é colorir as células triangulares internas.
DavidC
Mesmo, muito difícil. Tentando descobrir algo com recursão, mas ainda não consigo fazê-lo funcionar.
Teun Pronk
@DavidCarraher Corrigi a parte da coloração. Quer uma dica sobre isso?
precisa
2

Delphi [Trabalho em andamento]

Este é realmente difícil ..
Até agora tudo o que tenho é o círculo interno com triângulos e meu código é enorme.
Ainda não contei os personagens, sei que posso economizar muito em espaços em branco etc.

Começar com

Eu criei uma classe TD T é um prefixo de classe padrão não obrigatório, mas facilita ver a classe, D significa 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;

Eu também fiz um TPtipo, não, já que são minhas iniciais, mas é mais curto do que TPointe imaginei que usaria muitos pontos.
A propriedade Cé o ponto central da tela.
procedimentos:
StartDrawing(ainda a ser renomeado) dispara todas as funções de desenho para mim.
trfaz com que todos os triângulos no círculo (incluindo o próprio círculo)
ftcolore todos os triângulos.
Também fiz constantes para verdadeiro e falso, deslocamento e tamanho do círculo.

Funções e procedimentos

Qretornará o ponto onde 2 linhas cruzam / cruzam.
Existem muitas funções / procedimentos aninhados. Não tenho vontade de explicar todas, mas se você se pergunta o que algo sempre pode perguntar.

Aula completa

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.

Resultado até agora: (Sim, eu sei que as linhas não são perfeitas em todos os lugares. Não é possível encontrar o problema :() insira a descrição da imagem aqui
Não sei por que, mas os triângulos não mostram seus contornos. Eles fazem no meu bmp salvo.

Teun Pronk
fonte
Alguma atualização sobre isso?
Taylor Scott