你们可以帮我弄清楚QuadCurveTo
的4个参数吗,我试图找到有关QuadCurveTo
的一些信息,但是没有图片很难理解。我知道这4个参数绘制2 lines
来控制路径,但是我们如何仅知道那2个路径控制器才能知道/计算对象将经过哪个坐标。有一些formulas
吗?
import javafx.animation.PathTransition;
import javafx.animation.PathTransition.OrientationType;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.QuadCurveTo;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class _6 extends Application {
public Rectangle r;
@Override
public void start(final Stage stage) {
r = new Rectangle(50, 80, 80, 90);
r.setFill(javafx.scene.paint.Color.ORANGE);
r.setStrokeWidth(5);
r.setStroke(Color.ANTIQUEWHITE);
Path path = new Path();
path.getElements().add(new MoveTo(100.0f, 400.0f));
path.getElements().add(new QuadCurveTo(150.0f, 60.0f, 100.0f, 20.0f));
PathTransition pt = new PathTransition(Duration.millis(1000), path);
pt.setDuration(Duration.millis(10000));
pt.setNode(r);
pt.setPath(path);
pt.setOrientation(OrientationType.ORTHOGONAL_TO_TANGENT);
pt.setCycleCount(4000);
pt.setAutoReverse(true);
pt.play();
stage.setScene(new Scene(new Group(r), 500, 700));
stage.show();
}
public static void main(String[] args) { launch(args); }
}
您可以在
new QuadCurveTo(150.0f, 60.0f, 100.0f, 20.0f)
行上找到这些坐标,以下是Quadratic Bezier
的示例图片。 最佳答案
B(t)=(1-t)*(1-t)*P0 + 2*(1-t)*t*P1 + t*t*P2, 0<=t<=1
P0是起点,P1是控制点,P2是终点。请注意,
t
可能不等于转换的时间点,因为转换具有可修改的插值器。但是,路径将通过此曲线定义的所有点。在您的示例中,P0=(100, 400)
,P1=(150, 60)
和P2=(100, 20)
。解释是您在起点和控制点之间进行线性插值(称为
Q0(t)
),而在控制点和终点之间进行线性插值(Q1(t)
);那么曲线就是Q0(t)
和Q1(t)
之间在t
处的线性插值:B(t)=(1-t)*Q0(t)+t*Q1(t)