Создание формы пилы в обработке - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь воссоздать это изображение с помощью Processing.Как сделать красные плавники?

red saw shape

Мой мыслительный процесс, учитывая, что изображение симметрично по нескольким осям, состоял в том, чтобы разбить его.Я борюсь с "красными плавниками".Похоже, мне нужно использовать безье для создания линий, а затем заполнить их. Если я могу создать 1 плавник, то я могу повернуть его копию на оси, чтобы развернуть ее.https://processing.org/reference/bezier_.html

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Это крошечная картинка.Увеличьте его, а затем загрузите в инструмент для рисования кривых Безье.Вы знаете три фиксированные координаты (две координаты на окружности и кончик) и знаете общие касательные, по которым ваши контрольные точки должны быть:

enter image description here

ВыТакже известно, что контрольные точки и точки на кривой должны образовывать прямоугольник, который окружает фактическую кривую (например, кривая не может выходить за пределы этого прямоугольника) как свойство кривых Безье.

Так что теперь: вы играетевокруг в поиске правильных точек.Вы можете использовать что-то вроде Inkscape, Photoshop или Illustrator, чтобы увидеть, какая кривая выглядит достаточно хорошо, а затем скопировать координаты в свою собственную программу или просто нарисовать ее на сетке и найти грубые координаты, просто взглянув на свою сетку.а затем поиграйте со значениями, близкими к тому, что вы думаете.

А затем, когда у вас будут отсутствующие контрольные точки, вы будете рисовать их при обработке в виде фигуры:

void draw() {
  // draw the inner circle with a "fat" stroke
  strokeWeight(20);
  // assuming center mode
  ellipse(width/2, height/2, 100, 100);

  // reset that stroke fatness
  strokeWeight(1);
  // make sure we'll be rotating about the center of the sketch
  translate(width/2, height/2);
  // and then start drawing eight 'teeth'
  for (int i=0; i<8; i++) {
    beginShape();
    // we know where p1, p2, and p3 are.
    vertex(p1.x, p1.y);
    // and we "guessed" at c1, c2, c3, and c4.
    bezierVertex(c1.x, c1.y, c2.y, c2.y, p2.x, p2.y);
    bezierVertex(c3.x, c3.y, c4.y, c4.y, p3.x, p3.y);
    // We leave the shape "open" in case you want both stroke and fill
    endShape();
    // we're drawing eight teeth, so we need to rotate by 2*PI/8 each time
    rotate(0.25 * PI);
  }
}
0 голосов
/ 07 июня 2018

Просто поиграйте с контрольными точками кривых Безье, чтобы получить необходимую форму.

Это быстрый пример в Delphi.

Точки P0-P3 обозначают первую сторону зуба (вогнутую), точки P3-P6 обозначают вторую сторону зуба.

Rin и ROut - внутренний и внешний радиусы пилы, RM - средний радиус, используемый для расчета контрольных точек.

Внутренняя петля an - базовый угол для зуба, an1 слегка смещен, чтобы обеспечитькривизна вогнутой дуги, an2 - конечный угол (такой же, как базовый угол следующего зуба), а an3 - средний угол для контрольных точек выпуклой дуги.

enter image description here

var
  P: array[0..6] of TPoint;
  i, N, CX, CY, Rin, ROut, RM: integer;
  an, an1, an2, an3: Double;
begin
  Rin := 100;
  ROut := 170;
  RM := (RIn + ROut) div 2;
  N := 8;
  CX := 350;
  CY := 350;
  for i := 0 to 7 do begin
    an := i * 2 * Pi / N;
    an1 := an + 0.25 * Pi / N;
    an2 := an + 2 * Pi / N;
    an3 := an + Pi / N;
    P[0] := Point(Round(CX + Rin * Cos(an)), Round(CY + Rin * Sin(an)));
    P[1] := Point(Round(CX + RM * Cos(an1)), Round(CY + RM * Sin(an1)));
    P[2] := Point(Round(CX + RM * Cos(an1)), Round(CY + RM * Sin(an1)));
    P[3] := Point(Round(CX + ROut * Cos(an)), Round(CY + ROut * Sin(an)));
    P[4] := Point(Round(CX + RM * Cos(an3)), Round(CY + RM * Sin(an3)));
    P[5] := Point(Round(CX + RM * Cos(an3)), Round(CY + RM * Sin(an3)));
    P[6] := Point(Round(CX + RIn * Cos(an2)), Round(CY + RIn * Sin(an2)));
    Canvas.PolyBezier(P);
    Canvas.Ellipse(CX - 3 * RIn div 4, CY - 3 * RIn div 4,
                   CX + 3 * RIn div 4, CY + 3 * RIn div 4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...