alvvi
@alvvi
export default apathy;

Как нарисовать сетку внутри ромба?

Знаю, что решение наверное банальное, но моих математических знаний не хватает, чтобы притйи к нему самостятельно. Существует ромб, который рисуется в канвасе от центральной точки воображаемого круга по формуле x + r * cos(i * PI/2), y + r*sin(i * PI /2), где (x,y) координаты центра этого круга и r его раидус. Необходимо нарисовать сетку внутри ромба, при этом она не должна выходить за его пределы. В моей голове это выглядит как получение параллельных осям координат прямых, вопрос только в том, как "постепенно" уменьшать их, как получать эти точки принадлежащие ромбу, чтобы использовать их как парамерты для lineTo, moveTo?
  • Вопрос задан
  • 336 просмотров
Решения вопроса 1
Если углы ромба - прямые, то
const x:integer=100;
      y:integer=220;
      r:integer=70;
      step:integer=5;
var i,ds,di:integer;
begin
ds:=trunc(r*sqrt(2));
for i:=0 to ds do
    if i mod step = 0 then
       begin
       di:=ds-i;
       PaintBox1.Canvas.MoveTo(x-di,y-i);
       PaintBox1.Canvas.LineTo(x+di,y-i);
       PaintBox1.Canvas.MoveTo(x-di,y+i);
       PaintBox1.Canvas.LineTo(x+di,y+i);
       PaintBox1.Canvas.MoveTo(x-i,y-di);
       PaintBox1.Canvas.LineTo(x-i,y+di);
       PaintBox1.Canvas.MoveTo(x+i,y-di);
       PaintBox1.Canvas.LineTo(x+i,y+di);
       end;
end;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Interface
Возможно, имеет смысл смотреть в сторону паттернов:
https://www.w3schools.com/tags/canvas_createpattern.asp
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы