![]() |
|
||||||||||
|
|||||
|
Banned
[+1 16.01.09]
[+1 21.07.08] [+3 08.09.08] Регистрация: Apr 2008
Адрес: Hm...will it blend?
Сообщений: 303
|
Понимаю, что тема не раз уже обсуждалась, но поиск не дал ни одного толкового ответа.
Как определить "правильное" пересечение пунктирной линии с кавдратом? (hitTest, естественно, не подходит). Можно ли это сделать как-то геометрически? |
|
|||||
|
Например, проверить пересечении линии со всеми сторонами прямоугольника по очереди. Вообще ИМХО лучше самостоятельно вывести формулу проверки пересечения, но если будет тяжко, вот: http://algolist.ru/maths/geom/intersect/lineline2d.php
__________________
while(1) {} |
|
|||||
|
Намек:
if(линия._x >= квадрат._x and линия._x <= линия._x + линия._width)
__________________
Убейте меня! |
|
|||||
|
Цитата:
__________________
while(1) {} |
|
|||||
|
Banned
[+1 16.01.09]
[+1 21.07.08] [+3 08.09.08] Регистрация: Apr 2008
Адрес: Hm...will it blend?
Сообщений: 303
|
Цитата:
![]() На вашу ссылку зашел, но там для меня , увы, все как-то непонятно ![]() Можете написать пример на флеше? |
|
|||||
|
flazher, сейчас у меня нет времени, может быть завтра смогу набросать что-то. Но лучше ты сам попытайся разобраться с материалом по ссылке.
Там пишут: Цитата:
![]() После того как найдём ua и ub, если они обе от 0 до 1, то отрезки пересекаются. С этим понятно? Да, там же есть пример кода на C. Можешь оттуда перевести.
__________________
while(1) {} Последний раз редактировалось Division; 06.11.2008 в 21:49. |
|
|||||
|
[+3 05.08.09]
Регистрация: Sep 2008
Адрес: Ё∙м∙с∙к
Сообщений: 147
|
и все-таки, как так сделать? теперь это понадобилось мне.
Добавлено через 35 секунд и все-таки, как так сделать? теперь это понадобилось мне.
__________________
не прелюбодействуй с мозгом ближнего своего! |
|
|||||
|
Вот, нашёл:
public static function LineVsLine(v1 : Vector2, v2 : Vector2, v3 : Vector2, v4: Vector2) { var zn = (v4.y-v3.y)*(v2.x-v1.x)-(v4.x-v3.x)*(v2.y-v1.y); var ua = ((v4.x-v3.x)*(v1.y-v3.y)-(v4.y-v3.y)*(v1.x-v3.x))/zn; var ub = ((v2.x-v1.x)*(v1.y-v3.y)-(v2.y-v1.y)*(v1.x-v3.x))/zn; if ((ua>=0 && ua <=1) && (ub>=0 && ub <=1)) return true; return false; } Проверяет пересечение отрезков v1v2 и v3v4. Смысл в том чтоб представить квадрат в виде отрезков. Для квадрата их будет четыре (: И по очереди проверить пересечение твоего отрезка и отрезков квадрата. Vector2 - может быть любой класс, имеющий свойства x и y. Могу свой класс скинуть, там уже почти вся нужная математика описана PS можно было спокойно написать эту функцию самостоятельно, всё что нужно для этого написано в посте 6
__________________
while(1) {} Последний раз редактировалось Division; 21.11.2008 в 12:10. |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 32
|
вот, быстро накидал кода
![]() лови: var p0:MovieClip = createPoint(170,270); var p1:MovieClip = createPoint(300,100); var a:MovieClip = createPoint(200,200); var b:MovieClip = createPoint(300,200); var c:MovieClip = createPoint(300,300); var d:MovieClip = createPoint(200,300); onEnterFrame = function() { _root.clear(); var hit:Boolean = true; var dx:Number = p1._y-p0._y; var dy:Number = p0._x-p1._x; var s0:Number = (a._x-p0._x)*dx+(a._y-p0._y)*dy; var s1:Number = (b._x-p0._x)*dx+(b._y-p0._y)*dy; var s2:Number = (c._x-p0._x)*dx+(c._y-p0._y)*dy; var s3:Number = (d._x-p0._x)*dx+(d._y-p0._y)*dy; if( (s0> 0&&s1> 0&&s2> 0&&s3> 0)|| (s0<=0&&s1<=0&&s2<=0&&s3<=0))hit=false; beginFill((hit)?0xff0000:0x00ff00); moveTo(a._x,a._y); lineTo(b._x,b._y); lineTo(c._x,c._y); lineTo(d._x,d._y); endFill(); lineStyle(1); moveTo(p0._x,p0._y); lineTo(p1._x,p1._y); } function createPoint(x:Number,y:Number):MovieClip { var i:Number = getNextHighestDepth(); var p:MovieClip = createEmptyMovieClip("point"+i.toString(),i); p.beginFill(0); p.lineTo(7,0); p.lineTo(0,7); p.endFill(); p._x = x; p._y = y; p.onPress = function(){this.startDrag();} p.onMouseUp = function(){this.stopDrag();} return p; } |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 1,724
|
Вот
это вы намутили!!! ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:29. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|