Цитата:
|
(если это упростит задачу, то прямая линия параллельна оси Х)
|
да. сначала находишь t, потом находишь y
если прямая не параллельна осям то
http://www.flasher.ru/forum/showpost...11&postcount=4
Добавлено через 6 часов 40 минут
квадратичное уравнение безье(для трех точек):

Код AS3:
p4 = t*(t*(p3 - p2*2 + p1) + 2*(p2 - p1)) + p1
мутируешь его в квадратное уравнение:

Код AS3:
t*t*(p3 - p2*2 + p1) + t*2*(p2 - p1) + p1 - p4 = 0
http://www.flasher.ru/forum/showpost...72&postcount=2

Код AS3:
var a = (p3 - p2*2 + p1);
var b = 2*(p2 - p1);
var c = p1 - p4;
var t1 = (-b + Math.sqrt(b*b - 4*a*c)) / (2*a);
var t2 = (-b - Math.sqrt(b*b - 4*a*c)) / (2*a);
if(t1 >= 0 && t1 <= 1){
// t1 лежит на кривой
}
if(t2 >= 0 && t2 <= 1){
// t2 лежит на кривой
}

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Point;
public class Main extends Sprite
{
private var p1:Point = new Point(10, 10);
private var p2:Point = new Point(100, 300);
private var p3:Point = new Point(200, 40);
var liney:Number = 0;
public function Main() {
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
function quadraticBezier(p1, p2, p3, t){
return t*(t*(p3 - p2*2 + p1) + 2*(p2 - p1)) + p1;
}
private function onEnterFrame(event:Event = null):void {
this.graphics.clear()
liney++;
if (liney > 200) liney = 0;
var a = p3.y - p2.y*2 + p1.y;
var b = 2*(p2.y - p1.y);
var c = p1.y - liney;
var t1 = (-b + Math.sqrt(b*b - 4*a*c)) / (2*a);
var t2 = (-b - Math.sqrt(b*b - 4*a*c)) / (2*a);
this.graphics.lineStyle(1, 0x000000);
this.graphics.moveTo(0, liney);
this.graphics.lineTo(300, liney);
this.graphics.lineStyle(1, 0x000000);
this.graphics.moveTo(p1.x, p1.y);
this.graphics.curveTo(p2.x, p2.y, p3.x, p3.y);
this.graphics.lineStyle(2, 0xFF0000);
if(t1 * (t1 - 1) < 0){
// t1 лежит на кривой
var newPoint:Point = new Point();
newPoint.x = quadraticBezier(p1.x, p2.x, p3.x, t1);
newPoint.y = quadraticBezier(p1.y, p2.y, p3.y, t1);
this.graphics.drawCircle(newPoint.x, newPoint.y, 2);
}
if(t2 * (t2 - 1) < 0){
// t2 лежит на кривой
var newPoint:Point = new Point();
newPoint.x = quadraticBezier(p1.x, p2.x, p3.x, t2);
newPoint.y = quadraticBezier(p1.y, p2.y, p3.y, t2);
this.graphics.drawCircle(newPoint.x, newPoint.y, 2);
}
}
}
}