盡管PathElemetns非常適合描述復雜路徑,但我發現我寧愿使用數學表達式來描述我的路徑。 在數學課上使用圖形的所有歲月影響了我的思維方式。 二次和三角表達式使它們具有溫暖和舒適的感覺。 因此,我試圖創建使用數學表達式描述的PathTransitions。 如果有人希望達成相同的目標,我會在這篇文章中描述我的解決方案。
為此,首先需要解決數學表達式的方法,例如x * sin(x)或x ^ 2/45或(x ^ 2)/ sin(x-2)或其他方法可以想像。 為此,我很幸運地偶然發現了Lawrence Dol的Software Monkey網站。 Lawrence創建了一個名為MathEval的超輕量Java類 ,該類可評估數學表達式。 該類只有31KB,非常易于使用。 我使用MathEval繪制給定表達式的點。
JavaFx類Polyline用于存儲MathEval求解的標繪點,并將它們轉換為PathTransition可以將其用作輸入的Shape對象。
我最終創建的類稱為ExpressionTransitionMaker-抱歉,沒有Javadoc,但是您可以在此處找到源代碼。 該類應該非常易于使用。 它有兩個主要方法值得一提。 第一個是:
public void addExpressionEntry(double start, double end, double poll, GraphType type, String expression) throws IllegalArgumentException;
此方法用于添加表達式條目,該表達式條目由具有支持信息的表達式組成,例如圖表上的開始和結束位置,輪詢間隔和GraphType。 ExpressionTransitionMaker可以制作此GraphType枚舉描述的三種不同類型的圖:
public enum GraphType {vertical("y"), horizontal("x"), polar("a");private String var;GraphType(String var) {this.var = var;}public String getVar() {return var;}}
每個表達式條目都需要一個表達式。 對于水平圖,表達式的形式必須為f(x); g(y)為垂直; r(a)代表極坐標。 也就是說,水平圖需要一個表達式,其中唯一變量是字母“ x”,垂直圖需要一個表達式,其中唯一變量是字母“ y”,極坐標圖需要一個表達式,唯一的變量variable是字母“ a”,其中“ a”表示弧度的角度。 可以添加多個表達式條目。
顧名思義,水平圖和垂直圖分別用于分別向左和向右和向上和向下移動的圖形。 極坐標圖適用于沿圓形或螺旋形路徑移動的圖形。 如果給定負的輪詢值以及適當的起點和終點,則這三個方向都可以朝相反的方向發展。
值得一提的第二種方法是:
public SequentialTransition getSequentialTransition();
因為可以在ExpressionTransitionMaker中添加多個表達式,所以SequentialTransition對象用于播放ExpressionTransitionMaker可以創建的所有PathTransition。 返回的SequentialTransition填充有多個PathTransition,每個添加的表達式一個。 SequentialTransition將按順序播放其所有過渡。
就是這樣。 ExpressionTransitionMaker中還有一個或兩個其他公共方法,用戶可能會發現它們很方便,但為簡潔起見而被忽略。 我創建了一個簡單的小應用程序,用于測試ExpressionTransitionMaker,可以在此處找到。 該應用程序可以在瀏覽器上播放,它允許您輸入多個表達式,這些表達式用于使屏幕上的圖像動起來。

如果您有任何反饋意見希望閱讀。
參考:來自我們W4G合作伙伴 Jose Martinez的 JavaFX中基于表達式的PathTransitions
翻譯自: https://www.javacodegeeks.com/2012/09/expression-based-pathtransitions-in.html