2016-05-02 13 views
0

Моя цель - сделать так, чтобы при слайдере пользователя объект, похожий на соломинку, изгибался от середины.Как смоделировать изгибную соломинку в JavaFX

Вроде как это: http://s.hswstatic.com/gif/bendy-straw-a-1.jpg

Я проводил дни в поисках способов моделирования это с JavaFX формами, но, возможно, я что-то очевидное отсутствует. Когда ползунок находится на нуле, форма должна быть прямой, тогда как когда ползунок полностью согнут, форма должна напоминать руку гиперболы.

Большое вам спасибо.

+0

Я хотел бы использовать https://docs.oracle.com/javase/8/javafx/api/javafx/scene/shape/CubicCurve.html. Надеюсь, вам не нужны все эти удары в строке, это было бы сложно – brian

+0

Я просмотрел всю документацию по их API, проблема в том, где установить контрольные точки? И нет, удары не нужны –

+0

Извините, что я имел в виду QuadQurve, и вам нужно будет перемещать как контрольную, так и конечную точки при перемещении ползунка. – brian

ответ

0

Вы должны правильно вычислить математику, но что-то вроде этого - то, что я имел в виду. Вы даже можете попытаться просто оставить контрольную точку Y в середине линии, я переместил ее, так как понял, что она более реалистична, так как она начнет сгибаться внизу. Вы также должны сделать некоторое исчисление, чтобы выяснить конечную точку. Длина не должна изменяться.

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

Хорошо, математика! –