2013-07-14 1 views
0

В течение последних нескольких часов я пытался построить прямоугольник из меньших прямоугольников под любым углом; Я представлял себе это так: http://i.stack.imgur.com/Ymakk.pngПостроение прямоугольника из меньших прямоугольников

[Где черные линии представляют собой контур построенного прямоугольника, а красные линии представляют собой треугольники, которые его создают. Красные прямоугольники также должны быть полностью прямыми. ]

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

Экран настроен так, что верхний левый угол (0, 0) и нижний, правый (1, 1). Как мне это сделать? Не особо глядя на реальный код, псевдокод или даже объяснение, может быть, какая-то математика ... была бы блестящей! Заранее спасибо.

+1

Можете ли вы мириться с кодом в скрипке? и, пожалуйста, объясните это более простым способом, чтобы понять больше людей. –

+0

Конечно, я могу попробовать. Uhm, в основном я не могу повернуть прямоугольник, поэтому я предположил, что могу построить прямоугольник из маленьких длинных тонких прямоугольников, чтобы сформировать прямоугольник под нужным углом. Чтобы создать определенный прямоугольник, чтобы вы не могли видеть края меньших прямоугольников, я собирался сделать их размер y невероятно малым. Надеюсь, это изображение поможет: http://imgur.com/UrJJtQx Это демонстрирует большие прямоугольники, составляющие его, настолько большие, что вы можете видеть, что их края создают какой-то странный степпинг-прямоугольник. Нельзя также поворачивать прямоугольники, строящие его. – lelcats

+0

Видя метку «javascript», вы делаете это в браузере? – wwww

ответ

0

Вот немного геометрии для вас:

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

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

у = т * х + с

где вы вставляете х и у обоих краев, чтобы вычислить т, с (очень простая процедура на самом деле), или вы можете вычислить, что m = tan (angle)

Тогда вы можете «просто» спуститься по координатам y и получить соответствующие положения x на левой и правой линиях, которые принадлежат к прямоугольник путем вставки значений y, c и m в уравнение и решения для x.

Если вы посмотрите на картинку с прямоугольником, вы увидите, что в основном три части: первая часть идет от нижней к нижней левой кромке. Он следует длинной стороне слева и встречает край с левой стороны. После этого вы следуете за обеми краями справа, а затем видите верхний правый край и поднимаетесь в верхний левый угол (конечно, вы тоже можете делать это сверху вниз)

Вам нужно тщательно проверьте, достигли ли вы края между двумя линиями слева или справа и переключите свои значения для m и c в соответствующие моменты.

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

+0

Итак, в основном, найдите одну точку на двух строках, пройдитесь по оси Y до тех пор, пока я не смогу достичь какого-либо уровня выше, а затем переключитесь на два других? Показывать прямоугольники, как я иду? – lelcats

+0

Да, звучит так, как будто вы поняли это так, как я хотел его передать :) – timotimo

+0

У меня это работало.Я забыл установить это как мой принятый ответ. благодаря – lelcats