![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Что-же у вас за рамка такая должна быть и какую конкретную задачу вы преследуете? Если эту рамку вы можете построить математически, значит она не очень сложная и наверняка должен быть какой-то простой выход из этой ситуации. Если у вас будет время и желание, покажите пожалуйста картинку с такой рамкой и формой, которую вы хотите получить.
|
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
samana покажу обязательно, но она такая же, как и в фотошопе ( Ctrl+T ), только немного лучше получится. Математически она не сложная и я уже нашёл код, который проверяет на попадание в участок, но так-как я его не совсем понимаю, я со вчерашнего дня сижу с открытой математикой и листочками бумаги. Возможно придется недельку потратить, чтобы дотянуться до осознания условий и решений.
|
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Типа того.
|
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
samana Спасибо! Пример правда очень хороший, так что тему в закладки и как только подтяну свою математику, сразу возвращусь к изучению этого примера.
А то, как я уже говорил, вчера столкнувшись с аналогичным кодом, начав его разбирать с самого примитива, обнаружил, что я даже самое просто уравнение раз через раз правильно решаю По этому, пока я не подтяну всё, я даже в FD запускать не буду. |
|
|||||
|
Lorem ipsum
|
import flash.geom.Point; import flash.display.Graphics; import flash.display.Shape; import flash.events.Event; // Вершины произвольного выпуклого четырехугольника. var p1 = new Point(70, 150); var p2 = new Point(470, 70); var p3 = new Point(400, 300); var p4 = new Point(150, 330); // Шейп, в котором мы будем рисовать. var shape:Shape = new Shape(); stage.addChild(shape); stage.addEventListener(Event.ENTER_FRAME, handlerEnterFrame); // Ну понятно. function handlerEnterFrame(event:Event):void { var p0:Point = new Point(stage.mouseX, stage.mouseY); // Точка окажется внутри полигона, если она будет находиться // "справа" от всех сторон этого полигона при их обходе // по часовой стрелке. if (pointAtRight(p0, p1, p2) && pointAtRight(p0, p2, p3) && pointAtRight(p0, p3, p4) && pointAtRight(p0, p4, p1)) { // Мы внутри! Рисуем красным. drawPolygon(0xff0000); } else { // Мы снаружи. Рисуем серым. drawPolygon(0x707070); } } // Если смотреть из начальной точки p1 отрезка в конечную точку p2 // и точка p0 окажется где-то справа, возвращаем true. В противном // случае возвращаем false. function pointAtRight(p0:Point, p1:Point, p2:Point):Boolean { return (p0.x - p1.x) * (p2.y - p1.y) - (p0.y - p1.y) * (p2.x - p1.x) < 0; } // Отрисовывает наш четырехугольник с заданным цветом контура. function drawPolygon(color:int = 0x707070):void { var g:Graphics = shape.graphics; g.clear(); g.lineStyle(2, color); g.moveTo(p4.x, p4.y); g.lineTo(p1.x, p1.y); g.lineTo(p2.x, p2.y); g.lineTo(p3.x, p3.y); g.lineTo(p4.x, p4.y); }
__________________
Поймай яблоко 2! |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Zebestov Спасибо!
Помогите расшифровать эту формулу - В первой и третьей скобке, заключены нормали. Во второй и четвертой, числители из уравнения прямой проходящей через две точки. А вот дальше я вообще не понимаю, хотя в предыдущих "пониманиях" могу и ошибиться. Когда происходит перемножение, то мы получаем А и В? И почему потом вычитать? Добавлено через 6 минут Или тут вот какое рассуждение - по сути известны все элементы уравнения, решив которое, мы должны получить коэффициенты, в сумме которые равны нулю. Но так-как точка не принадлежит прямой и уравнение не решается правильно, то ноль мы не получаем и... я все равно не понимаю ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|