Java语言程序设计基础篇_编程练习题**15.24(动画:来回摆动)

**15.24(动画:来回摆动)

编写一个程序,用动画完成来回摆动,如图15-31所示。单击/释放鼠标以暂停/恢复动画

  • 习题思路
  1. 新建一个开口向上的Arc圆弧作为路径,将类型设置为OPEN开放型
  2. 新建一个小圆Circle
  3. 创建一个PathTransition,将路径设为圆弧Arc,节点设置为Circle

  4. 为面板注册一个鼠标事件,鼠标按下则调用pause()方法,释放调用play()方法

代码示例:编程练习题15_24AnimationSwinging.java 

package chapter_15;

import javafx.animation.PathTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Arc;
import javafx.scene.shape.ArcType;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class 编程练习题15_24AnimationSwinging extends Application{
	@Override
	public void start(Stage primaryStage) throws Exception {
		Pane pane = new Pane();
		Arc arc = new Arc(150, 200, 100, 40, 180, 180);
		arc.setType(ArcType.OPEN);
		arc.setFill(Color.WHITE);
		arc.setStroke(Color.BLACK);
		pane.getChildren().add(arc);
		
		Circle circle = new Circle(10);
		circle.setFill(Color.ORANGE);
		pane.getChildren().add(circle);
		
		PathTransition pt = new PathTransition();
		pt.setDuration(Duration.millis(2000));
		pt.setPath(arc);
		pt.setNode(circle);
		pt.setCycleCount(Timeline.INDEFINITE);
		pt.setAutoReverse(true);
		pt.play();
		
		pane.setOnMousePressed(e -> pt.pause());
		pane.setOnMouseReleased(e -> pt.play());
		
		Scene scene = new Scene(pane, 300, 300);
		primaryStage.setTitle("编程练习题15_24AnimationSwinging");
		primaryStage.setScene(scene);
		primaryStage.show();
	}
	public static void main(String[] args) {
		Application.launch(args);
	}
}
  • 结果展示 

 

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
请优化下面的代码使其能够通过输入一组行权价来绘制波动率微笑曲线 import numpy as np from scipy.stats import norm from scipy.optimize import minimize import matplotlib.pyplot as plt def bs_option_price(S, K, r, q, sigma, T, option_type): d1 = (np.log(S/K) + (r - q + sigma**2/2) * T) / (sigma * np.sqrt(T)) d2 = d1 - sigma * np.sqrt(T) if option_type == 'call': Nd1 = norm.cdf(d1) Nd2 = norm.cdf(d2) option_price = S * np.exp(-q * T) * Nd1 - K * np.exp(-r * T) * Nd2 elif option_type == 'put': Nd1 = norm.cdf(-d1) Nd2 = norm.cdf(-d2) option_price = K * np.exp(-r * T) * (1 - Nd2) - S * np.exp(-q * T) * (1 - Nd1) else: raise ValueError('Invalid option type') return option_price def implied_volatility(S, K, r, q, T, option_price, option_type): obj_fun = lambda sigma: (bs_option_price(S, K, r, q, sigma, T, option_type) - option_price)**2 res = minimize(obj_fun, x0=0.2) return res.x[0] def smile_curve(S, r, q, T, option_type, strike_range, option_prices): vols = [] for K, option_price in zip(strike_range, option_prices): vol = implied_volatility(S, K, r, q, T, option_price, option_type) vols.append(vol) plt.plot(strike_range, vols) plt.xlabel('Strike') plt.ylabel('Implied Volatility') plt.title(f'{option_type.capitalize()} Implied Volatility Smile') plt.show() S = 100 r = 0.05 q = 0.02 T = 0.25 option_type = 'call' strike_range = np.linspace(80, 120, 41) option_prices = [13.05, 10.40, 7.93, 5.75, 4.00, 2.66, 1.68, 1.02, 0.58, 0.31, 0.15, 0.07, 0.03, 0.01, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.01, 0.03, 0.07, 0.14, 0.25, 0.42, 0.67, 1.00, 1.44, 2.02, 2.74, 3.60, 4.60, 5.73, 7.00, 8.39, 9.92, 11.57, 13.34, 15.24] smile_curve(S, r, q, T, option_type, strike_range, option_prices)
05-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值