Рисовать Шри Янтра


11

Вызов:

Нарисуй Шри Янтра .

Как:

Есть разные способы нарисовать это. Все включают много шагов. Если вы думаете, что можете нарисовать его, не следуя связанным шагам, прокрутите ниже список элементов, которые вы должны иметь на своем чертеже .

Полные шаги можно найти здесь:

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

( Я не копировал их здесь, потому что это стало бы очень длинным вопросом , вот зеркало archieve.org на случай, если первая ссылка когда-либо выйдет из строя )

Окончательная картинка должна выглядеть как на картинке ниже:

введите описание изображения здесь

Должен иметь:

В принципе, любой метод рисования по вашему выбору будет правильным ответом, если вы сохраните самые важные элементы.

  1. Количество треугольников должно быть таким же, как на рисунке выше (43 меньших треугольника возникли в результате чередования 9 больших треугольников)

  2. Это тройные пересечения соблюдаются:

введите описание изображения здесь

  1. Концы восходящих треугольников касаются оснований 4 нисходящих треугольников, а кончики нижних треугольников должны касаться оснований 3 верхних треугольников, как показано на рисунке ниже.

    введите описание изображения здесь

  2. Внутренний круг (бинду) является концентрическим с внешним кругом.

  3. Концы (вершины) больших треугольников должны касаться внешнего круга: введите описание изображения здесь

  4. Конечное изображение должно иметь все элементы и в целом должно выглядеть так: введите описание изображения здесь

  5. Цвет должен быть примерно таким же, как на изображении выше для каждого элемента (включая лепестки).

  6. Форма лепестков предпочтительно должна выглядеть примерно так, как показано на рисунке ниже, но также может быть просто полукругом или простой дугой сечения круга:

  7. Не существует строгих ограничений на пропорции окружностей или размеров ворот, но самый наружный круг должен иметь диаметр не менее 90% от стороны внешнего квадрата, остальные элементы будут соответственно расположены относительно этих пропорций.

введите описание изображения здесь

введите описание изображения здесь

Языки программирования и результаты

Нет ограничений ни по языку программирования, ни по формату результата (это может быть как векторное изображение, растровое изображение, холст и т. Д.), При условии, что результат является относительно четким и различимым (по крайней мере, 800px X 800px)

Последнее редактирование: не существует идеального метода рисования, так как этот блог так хорошо исследует их: http://fotthewuk.livejournal.com/ Принимая это во внимание, небольшие ошибки будут допущены.

На этом этапе очень интересно узнать, что весьма вероятно, что не существует идеального решения, такого как возведение в квадрат круга.


3
Я думаю, вам нужно определить цветовую палитру, соответствующие масштабы длины внешних кругов, а также фон и форму лепестков.
Мартин Эндер

@ MartinBüttner Я переформулировал вопрос, скажите, пожалуйста, лучше ли информация. Рисовать эту янтру - непростая задача, а
сложить

Привет, я знаю, что спецификация очень жесткая на этом. Но это обязательно. Моему недавнему подобному вопросу также было тяжело из-за спецификаций, так что лучше придумать один, потому что без этого это слишком сложно нарисовать и практически не является реальной проблемой.
Оптимизатор

5
Этот вызов сумасшедший.
AL

1
Спасибо, разобрался уже, хотя;) И, черт возьми ... это сложно, Только выполнил треугольники, и мой код уже огромен. Оптимизация теперь xD
Теун Пронк

Ответы:


8

Mathematica - 2836 2536 символов

Было немного головокружительно выяснять комбинации областей, которые делают маленькие треугольники доступными для окраски.

Рама

Каркасные объекты - это неравенства, которые описываются как регионы. Например, красный и желтый гребешки - две области кругов.

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

Тогда есть диск, чтобы скрыть некоторые круги, которые использовались, чтобы сделать гребешок.

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

Иннардс

Некоторые определения вершин и треугольников. Каждый треугольник t1, t2, ... является отдельной областью. Логические операции ( RegionUnion. RegionIntersection, И RegionDifference) с большими треугольниками используются для определения меньших треугольных ячеек как производных областей, которые могут быть окрашены в индивидуальный цвет.

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

Соединение частей

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


Golfed

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
* внутренности, и это совершенно потрясающе; +1
Сохам Чаудхури

Борьба с цветами здесь также, хотя внутренний круг с треугольниками - все, что я имею пока. Мне нужно кое-что наверстать;)
Теун Пронк

Teun Pronk, помогает использовать слои для рамки (все, кроме синих треугольников). Луноподобные лепестки могут быть получены путем рендеринга полных кругов и наложения их на большой белый диск, на котором изображена центральная фигура. Для меня самая сложная часть - это окраска внутренних треугольных ячеек.
DavidC

То же самое, очень сложно. Попытка отработать что-то с помощью рекурсии, но пока не получается.
Теун Пронк

@DavidCarraher Я исправил раскраску. Хотите совет об этом?
Теун Пронк

2

Delphi [Работа в процессе]

Это действительно сложно.
Пока все, что у меня есть, это внутренний круг с треугольниками, и мой код огромен.
Еще не посчитали персонажей, я знаю, что могу сэкономить на пробелах и т. Д.

Начать с

Я сделал класс TD T префиксом класса по умолчанию, не обязательным, но он позволяет легко увидеть его класс, D обозначает 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;

Я также сделал TPшрифт, нет, не потому, что это мои инициалы, но он короче, TPointи я решил, что буду использовать много точек.
свойство Cявляется центральной точкой холста.
процедуры:
StartDrawing(пока не переименован) запускает все функции рисования для меня.
trделает все треугольники в круге (включая сам круг)
ftбудет окрашивать все треугольники.
Я также сделал несколько констант для истинного и ложного, смещения и размера круга.

Функции и процедуры

Qвернет точку, где 2 линии пересекаются / пересекаются.
Есть много вложенных функций / процедур. Я не хочу объяснять их все, но если вам интересно, что же вы делаете, вы всегда можете спросить.

Завершить урок

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.

Результат до сих пор: (Да, я знаю, что линии не везде идеальны. Не могу найти проблему :() введите описание изображения здесь
Не знаю почему, но треугольники не показывают свои очертания. Они отображаются на моем сохраненном bmp.


Есть какие-нибудь обновления по этому поводу?
Тейлор Скотт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.