2016-05-02 2 views
0

Mon but est de faire en sorte que lorsqu'un utilisateur glisse un Slider, un objet qui est comme une paille se plie de son milieu.Comment modéliser une paille de cintrage dans JavaFX

Un peu comme ceci: http://s.hswstatic.com/gif/bendy-straw-a-1.jpg

J'ai passé des jours à chercher des moyens pour modéliser ce avec des formes JavaFX, mais peut-être que je manque quelque chose d'évident. Lorsque le curseur est à zéro, la forme doit être une ligne droite, tandis que lorsque le curseur est complètement plié, la forme doit ressembler à un bras d'une hyperbole.

Merci beaucoup.

+0

J'utiliser https://docs.oracle.com/javase/8/javafx/api/javafx/scene/shape/CubicCurve.html. J'espère que vous ne voulez pas toutes ces bosses dans la ligne, ce serait difficile – brian

+0

J'ai regardé toute la documentation sur leur API, le problème est de savoir où placer les points de contrôle? Et non, les bosses ne sont pas nécessaires –

+0

Désolé, je voulais dire QuadQurve, et vous devrez déplacer à la fois le contrôle et les points de fin lorsque le curseur se déplace. – brian

Répondre

0

Vous aurez à comprendre les maths correctement, mais quelque chose comme ça est ce que j'avais en tête. Vous pouvez même essayer de simplement laisser le point de contrôle Y au milieu de la ligne, je l'ai déplacé depuis que je me suis dit que c'est plus réaliste, comme il va commencer à se pencher en bas. Vous devez également faire quelques calculs pour déterminer le point final. La longueur ne devrait pas changer.

package curve; 

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.control.Slider; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.QuadCurve; 
import javafx.stage.Stage; 

public class Curve extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     QuadCurve qc = new QuadCurve(100, 500, 100, 250, 100, 0); 
     qc.setStroke(Color.BLUE); 
     qc.setStrokeWidth(5); 
     qc.setFill(Color.TRANSPARENT); 

     Slider slider = new Slider(0, 200, 0); 
     qc.endXProperty().bind(slider.valueProperty().add(100)); 
     qc.endYProperty().bind(slider.valueProperty().add(100).divide(1.2)); 
     qc.controlYProperty().bind(slider.valueProperty().multiply(-1).add(500)); 

     Group group = new Group(qc,slider); 
     Scene scene = new Scene(group, 500,500); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+0

Très bien, maths c'est! –