У меня есть прямоугольник с известным размером и положением. (flag)
Я должен заполнить этот прямоугольник четырьмя другими прямоугольниками. (полосы)
Каждая полоса должна иметь 1/4 от общей ширины флага, а его позиция близка к предыдущей.
Я должен нарисовать эти полосы со случайным углом, который идет от 0 ° до 90 °.
0 ° = Вертикальные полосы (ширина полосы = ширина флага/4)
90 ° = Горизонтальные полосы (ширина полосы = флаг высота/4)
Как можно рассчитать ширину каждой полосы для других углов?
Чертежные полосы в математической формуле флага
int stripes = 4;
RectF rect = new RectF(0, 0, 100f, 75f);
float angle = new Random.nextInt(90);
float stripeSize;
if (angle == 0) {
stripeSize = rect.width()/stripes;
} else if (angle == 90) {
stripeSize = rect.height()/stripes;
} else {
stripeSize = ?
}
canvas.save();
canvas.rotate(angle, rect.centerX(), rect.centerY());
float offset = 0;
for (int i = 0; i < stripes; i++) {
if (angle == 0) {
reusableRect.set(offset, rect.top, offset + stripeSize, rect.bottom);
} else if (angle == 90) {
reusableRect.set(rect.left, offset, rect.right, offset + stripeSize);
} else {
reusableRect.set(?, ?, ?, ?);
}
canvas.drawRect(reusableRect, paint);
offset += stripeSize;
}
canvas.restore();
Я попробовал, и это помогло настроить некоторые вещи. Но он все еще работает только при 0 ° и 90 °. Я пытаюсь начать с квадрата, и на 45 ° полоса должна быть длинной, как Hypotenuse, поэтому формула неправильная. Теперь у меня есть положение полос, так как я начинаю рисовать слева направо, и я думаю, что я должен начать с центра. –
Вы правы, моя формула не совсем работает. Общая ширина полосы может быть такой же, как и диагональ прямоугольника. Вы должны уметь выяснить, какой угол сделает диагональ общей шириной полосы и придумает лучшую формулу. – Karakuri
Да, я двигаюсь по алгоритму пересечения линии. Нарисуйте линию из верхней левой части прямоугольника с помощью «угла». Затем я нахожу вторую точку пересечения и, наконец, могу вычислить максимальную длину. –