第十六章习题解答
16-1设某一时刻的横波波形曲线如图16-1(a)所示,水平箭头表示该波的传播方向,试分别用矢量标明图中A、B、C、D、E、F、G、H、I等质点在该时刻的运动方向,并画出经过后的波形曲线。
解:波形曲线表示的是某一时刻波线上所有质点偏离平衡位置的振动位移的分布图。将波形曲线沿波的传播方向平移,就是下一时刻波线上质点偏离平衡位置的位移分布,据此可确定各质点的运动方向,如图16-1(b)所示。将波形曲线图16-1(a)沿波的传播方向平移λ/4就是经过T/4后的波形曲线,如图16-1(c)所示。
习题16-1图
16-3 一横波沿绳子传播,其波函数为(其中各量均采用国际单位制)。
(1)求波的振幅、波速、频率及波长;
(2)求绳上质点振动时的最大速度。
解:(1) 将已知波函数化成标准形式,并与标准形式对应项比较,即可求出各参量。
与波函数标准形式相比较,得
m ,Hz, m
(2)质点振动时的最大速度
16-4 一波源作简谐振动,周期为,经平衡位置向正方向运动时,作为计时起点。设此振动以的速度沿直线传播,求:
(1)该波动沿某波线的方程;
(2)距波源为16m处和20m处质点的振动方程和初相;
(3)距波源为15m处和16m处的两质点的相位差。
解:(1)由题义可知,。经平衡位置向正方向运动时,作为波源作简谐振动的计时起点,由旋转矢量法可得,波长。
将其带入波动方程的标准形式可得该波动沿某波线的方程为:
(2)将,分别代入上面所得波动方程中,可得两处质点的振动方程和初相分别为:
,
,。或均为,即与波源同步调。
(3)距波源为15m处和16m处的两质点的相位差为
16-5 有一波在介质中传播,其波速,振幅,频率,若介质的密度,求:
(1)该波的能流密度;
(2)1min内垂直通过面积为0.4m2的总能量。
解:(1)将已知数据代入波的能流密度表达式,可得
(2)1min内垂直通过面积为0.4m2的总能量为
16-6 频率为300Hz、波速为330m·s-1的平面简谐波在直径为16.0㎝的管道中传播,能流密度为10.0×10-3J·s-1·m-2。求:
(1)平均能量密度;
(2)最大能量密度;
(3)两相邻同相位波面之间的总能量。
解:(1)将已知数据代入波的能量密度表达式,可得
(1)J·m-3
(2)J·m-3
(3)J。
16-7 如图所示,两振动方向相同的平面简谐波分别位于、点。设它们的相位相同,频率均为Hz,波速m·s-1。求点处两列波的相位差。
习题16-7图
解:相位差的定义及余弦定理可得:
。
16-8 如图所示,、为两个振动方向相同的平面简谐波的波源,其振动表达式分别为和(国际单位制)。若两列波在点相遇,m,m,波速为0.20m·s-1,求:
(1)两列波在点的相位差;
(2)点合振动的振幅。
习题16-8图
解:(1)把已知条件代入相位差公式
其中,m,m,Hz,
,可得
(2),由于两列波在点的相位差,因此在点合振动加强,由合振动的振幅公式
,可得
点合振动的振幅
16-9 两列波在一根很长的细绳上传播,它们的方程分别为和(国际单位制)。
(1)证明这细绳是作驻波式振动,并求波节点和波腹点的位置;
(2)波腹处的振幅多大?在m处,振幅多大?
解:(1)细绳的合振动为
为驻波方程。
波节位置应满足,由此解得波节位置
波腹位置应满足,由此解得波腹位置
(2)波腹处的振幅等于0.12m;在m处,振幅为
16-10 一弦上的驻波方程式为(国际单位制)。
(1)若将此驻波看成是由传播方向相反、振幅及波速均相同的两列相干波叠加而成的,求它们的振幅及波速;
(2)求相邻波节之间的距离;
(3)求时位于m处质点的振动速度。
解:(1)将与驻波方程相比较,得两列相干波的振幅
;波长;频率;
波速(m·s-1)
(2)相邻波节之间的距离为m
(3)s时位于m处质点的振动速度为
16-11 在实验室中做驻波实验时,将一根长3m的弦线一端系于电动音叉的一臂上,该音叉在垂直弦线长度的方向上以60Hz的频率作振动,弦线的质量为60×10-3kg。如果要使该弦线产生有四个波腹的振动,必须对这根弦线施加多大的张力?
解:由题义可知,于是可求出波长
(m)
波速(m·s-1)
再由可求出对这根弦线施加的张力为
(N)
第二篇:java web编程技术(沈泽刚,清华大学出版社)第十六章课后习题部分解答
********* AdapterDemo.java********* import java.awt.event.*;
import javax.swing.JFrame;
public class AdapterDemo extends JFrame{
} public static void main(String[] args){ } AdapterDemo frame = new AdapterDemo(); frame.setSize(220, 80); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("适配器演示"); frame.setVisible(true); public AdapterDemo(){ } addWindowListener( new WindowAdapter(){ public void windowActivated(WindowEvent event){ System.out.println("窗口激活"); ); } }
*********** AnimationDemo.java*****
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AnimationDemo extends JFrame{ public AnimationDemo(){
add(new MovingMessagePanel("消息移动")); }
public static void main(String[] args){ } AnimationDemo frame = new AnimationDemo(); frame.setSize(280, 100); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("消息移动演示"); frame.setVisible(true);
static class MovingMessagePanel extends JPanel { private String message = "Java欢迎您"; private int xCoordinate = 0; private int yCoordinate = 20; public MovingMessagePanel(String message){ } protected void paintComponent(Graphics g){ } class TimerListener implements ActionListener{ public void actionPerformed(ActionEvent e){ repaint(); } }//class TimerListener implements ActionListener super.paintComponent(g); if (xCoordinate > getWidth()) { xCoordinate = -20; } xCoordinate += 5; g.drawString(message, xCoordinate, yCoordinate); this.message = message; Timer timer = new Timer(1000, new TimerListener()); timer.start();
}// static class MovingMessagePanel extends JPanel
}//public class AnimationDemo extends JFrame
********* AnonymousListenerDemo.java******** import javax.swing.*;
import java.awt.event.*;
public class AnonymousListenerDemo extends JFrame{
public AnonymousListenerDemo(){ JButton jbtNew = new JButton("新建"); JButton jbtOpen = new JButton("打开"); JButton jbtSave = new JButton("保存"); JButton jbtPrint = new JButton("打印"); JPanel panel = new JPanel();
panel.add(jbtNew); panel.add(jbtOpen); panel.add(jbtSave); panel.add(jbtPrint); add(panel); jbtNew.addActionListener( new ActionListener(){ ); } public void actionPerformed(ActionEvent e){ System.out.println("响应新建按钮被点击的动作"); } jbtOpen.addActionListener( ); jbtSave.addActionListener( new ActionListener(){ ); } public void actionPerformed(ActionEvent e){ System.out.println("响应保存按钮被点击的动作"); } new ActionListener(){ public void actionPerformed(ActionEvent e){ System.out.println("响应打开按钮被点击的动作"); } } jbtPrint.addActionListener( ); new ActionListener(){ public void actionPerformed(ActionEvent e){ System.out.println("响应打印按钮被点击的动作"); } } }//public class AnonymousListenerDemo extends JFrame public static void main(String[] args){ JFrame frame = new AnonymousListenerDemo(); frame.setTitle("匿名内部类监听器演示");
} } frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack();//依据放在框架中组件的大小来自动调整框架的大小 frame.setVisible(true);
************* ClockAnimation.java******* import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;
import java.util.*;
public class ClockAnimation extends JFrame{
private class StillClock extends JPanel{ private int hour; private int minute; private int second; private StillClock clock = new StillClock(); public ClockAnimation(){ } add(clock); Timer timer = new Timer(1000, new TimerListener()); timer.start(); private class TimerListener implements ActionListener{ } public void actionPerformed(ActionEvent e){ clock.setCurrentTime(); } clock.repaint(); public static void main(String[] args){ } JFrame frame = new ClockAnimation(); frame.setSize(200, 200); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("动态时钟"); frame.setVisible(true);
int clockRadius = (int)(Math.min(getWidth(), getHeight()) * 0.8 * 0.5); int xCenter = getWidth() / 2; int yCenter = getHeight() / 2; public int getMinute(){ } return minute; public StillClock(){ setCurrentTime(); } public StillClock(int hour, int minute, int second){ } public int getHour(){ } return hour; this.hour = hour; this.minute = minute; this.second = second; public void setHour(int hour){ } this.hour = hour; repaint(); public void setMinute(int minute){ } public int getSecond(){ } return second; this.minute = minute; repaint(); public void setSecond(int second){ } protected void paintComponent(Graphics g){ super.paintComponent(g); this.second = second; repaint();
g.setColor(Color.BLACK);
g.drawOval(xCenter - clockRadius, yCenter - clockRadius, 2 * clockRadius, 2 * clockRadius);
g.drawString("12", xCenter - 5, yCenter - clockRadius + 12);
int hLength = (int)(clockRadius * 0.5);
int xHour = (int)(xCenter + hLength * Math.sin((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
int yHour = (int)(yCenter - hLength * Math.cos((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
g.setColor(Color.green);
}//private class StillClock extends JPanel
}//public class ClockAnimation extends JFrame public Dimension getPreferredSize(){ return new Dimension(200, 200); } g.drawLine(xCenter, yCenter, xHour, yHour); }//protected void paintComponent(Graphics g) public void setCurrentTime(){ Calendar calendar = new GregorianCalendar(); } this.hour = calendar.get(Calendar.HOUR_OF_DAY); this.minute = calendar.get(Calendar.MINUTE); this.second = calendar.get(Calendar.SECOND); g.drawString("9", xCenter - clockRadius + 3, yCenter + 5); g.drawString("3", xCenter + clockRadius - 10, yCenter + 3); g.drawString("6", xCenter - 3, yCenter + clockRadius - 3); int sLength = (int)(clockRadius * 0.8); int xSecond = (int)(xCenter + sLength * Math.sin(second * (2 * Math.PI / 60))); int ySecond = (int)(yCenter - sLength * Math.cos(second * (2 * Math.PI / 60))); g.setColor(Color.red); g.drawLine(xCenter, yCenter, xSecond, ySecond); int mLength = (int)(clockRadius * 0.65); int xMinute = (int)(xCenter + mLength * Math.sin(minute * (2 * Math.PI / 60))); int yMinute = (int)(yCenter - mLength * Math.cos(minute * (2 * Math.PI / 60))); g.setColor(Color.blue); g.drawLine(xCenter, yCenter, xMinute, yMinute);
***************** ControlCircle.java************ import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ControlCircle extends JFrame{
private JButton jbtEnlarge = new JButton("放大");
private JButton jbtShrink = new JButton("缩小");
private CirclePanel canvas = new CirclePanel();
public void enlarge(){ radius++; repaint(); } public static void main(String[] args){ JFrame frame = new ControlCircle(); frame.setTitle("控制圆"); } class EnlargeListener implements ActionListener{ public void actionPerformed(ActionEvent e){ } class CirclePanel extends JPanel{ private int radius = 5; } canvas.enlarge(); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200, 200); frame.setVisible(true); jbtEnlarge.addActionListener(new EnlargeListener()); public ControlCircle(){ JPanel panel = new JPanel(); panel.add(jbtEnlarge); panel.add(jbtShrink); this.add(canvas, BorderLayout.CENTER); this.add(panel, BorderLayout.SOUTH);
}
} } protected void paintComponent(Graphics g){ super.paintComponent(g); g.drawOval(getWidth()/2 - radius, getHeight()/2 - radius, 2*radius, 2* radius); }
*************** DetectSourceDemo.java***** import javax.swing.*;
import java.awt.event.*;
public class DetectSourceDemo extends JFrame{
private JButton jbtNew = new JButton("新建");
private JButton jbtOpen = new JButton("打开");
private JButton jbtSave = new JButton("保存");
}//public AnonymousListenerDemo() class ButtonListener implements ActionListener{ public void actionPerformed(ActionEvent e){ if (e.getSource() == jbtNew) System.out.println("响应新建按钮点击动作"); else if (e.getSource() == jbtOpen) public DetectSourceDemo(){ JPanel panel = new JPanel(); panel.add(jbtNew); panel.add(jbtOpen); panel.add(jbtSave); panel.add(jbtPrint); add(panel); ButtonListener listener = new ButtonListener(); jbtNew.addActionListener(listener); jbtOpen.addActionListener(listener); jbtSave.addActionListener(listener); jbtPrint.addActionListener(listener); private JButton jbtPrint = new JButton("打印");
} } System.out.println("响应打开按钮点击动作"); else if (e.getSource() == jbtSave) System.out.println("响应保存按钮点击动作"); else if (e.getSource() == jbtPrint) System.out.println("响应打印按钮点击动作"); public static void main(String[] args){ } JFrame frame = new DetectSourceDemo(); frame.setTitle("检测事件源监听器演示"); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack();//依据放在框架中组件的大小来自动调整框架的大小 frame.setVisible(true);
}//public class DetectSourceDemo extends JFrame
*************** FrameAsListenerDemo.java**** import javax.swing.*;
import java.awt.event.*;
public class FrameAsListenerDemo extends JFrame
implements ActionListener{
private JButton jbtNew = new JButton("新建");
private JButton jbtOpen = new JButton("打开");
private JButton jbtSave = new JButton("保存");
jbtNew.addActionListener(this); jbtOpen.addActionListener(this); jbtSave.addActionListener(this); public FrameAsListenerDemo(){ JPanel panel = new JPanel(); panel.add(jbtNew); panel.add(jbtOpen); panel.add(jbtSave); panel.add(jbtPrint); add(panel); private JButton jbtPrint = new JButton("打印");
jbtPrint.addActionListener(this); }//public FrameAsListenerDemo() public void actionPerformed(ActionEvent e){ } if (e.getSource() == jbtNew) System.out.println("响应新建按钮点击动作"); else if (e.getSource() == jbtOpen) System.out.println("响应打开按钮点击动作"); else if (e.getSource() == jbtSave) System.out.println("响应保存按钮点击动作"); else if (e.getSource() == jbtPrint) System.out.println("响应打印按钮点击动作"); public static void main(String[] args){ JFrame frame = new FrameAsListenerDemo(); frame.setTitle("框架类监听器演示"); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack();//依据放在框架中组件的大小来自动调整框架的大小 frame.setVisible(true);
}
}//public class DetectSourceDemo extends JFrame
************* KeyEventDemo.java*********
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyEventDemo extends JFrame{
private KeyboardPanel keyboardPanel = new KeyboardPanel();
public static void main(String[] args){ KeyEventDemo frame = new KeyEventDemo(); frame.setSize(300, 300); frame.setLocationRelativeTo(null); public KeyEventDemo(){ } add(keyboardPanel); keyboardPanel.setFocusable(true);
} frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("键盘事件演示"); frame.setVisible(true); static class KeyboardPanel extends JPanel { private int x = 100; private int y = 100; private char keyChar = 'A'; public KeyboardPanel(){ addKeyListener( } protected void paintComponent(Graphics g){ super.paintComponent(g); g.setFont(new Font("TimesRoman", Font.PLAIN, 24)); } g.drawString(String.valueOf(keyChar), x, y); ); new KeyAdapter(){ public void keyPressed(KeyEvent e){ } } switch(e.getKeyCode()) { case KeyEvent.VK_DOWN: y += 10; break; } repaint(); case KeyEvent.VK_UP: y -= 10; break; case KeyEvent.VK_LEFT: x -= 10; break; case KeyEvent.VK_RIGHT: x += 10; break; default: keyChar = e.getKeyChar(); }//static class KeyboardPanel extends JPanel
}//public class KeyEventDemo extends JFrame
***************** LoanCalculator.java********** import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.border.TitledBorder;
public class LoanCalculator extends JFrame{
private JTextField jtfAnnualInterestRate = new JTextField(); private JTextField jtfNumberOfYears = new JTextField(); private JTextField jtfLoanAmout = new JTextField(); private JTextField jtfMonthlyPayment = new JTextField(); private JTextField jtfTotalPayment = new JTextField(); private JButton jbtComputeLoan = new JButton("计算还款金额"); public LoanCalculator(){ JPanel p1 = new JPanel(new GridLayout(5, 2)); p1.add(new JLabel("年利率")); p1.add(jtfAnnualInterestRate); p1.add(new JLabel("年数")); p1.add(jtfNumberOfYears); p1.add(new JLabel("贷款总额")); p1.add(jtfLoanAmout); p1.add(new JLabel("月还款额")); p1.add(jtfMonthlyPayment); p1.add(new JLabel("总还款额")); p1.add(jtfTotalPayment); p1.setBorder(new TitledBorder("输入贷款总额, 利率,年")); JPanel p2 = new JPanel(new FlowLayout(FlowLayout.RIGHT)); p2.add(jbtComputeLoan); add(p1, BorderLayout.CENTER); add(p2, BorderLayout.SOUTH); jbtComputeLoan.addActionListener(new ButtonListener()); }//public LoanCalculator() private class ButtonListener implements ActionListener{ } public void actionPerformed(ActionEvent e){ double interest = Double.parseDouble(jtfAnnualInterestRate.getText()); } int year = Integer.parseInt(jtfNumberOfYears.getText()); double loanAmount = Double.parseDouble(jtfLoanAmout.getText()); Loan loan = new Loan(interest, year, loanAmount); jtfMonthlyPayment.setText(String.format("%.2f", loan.getMonthlyPayment())); jtfTotalPayment.setText(String.format("%.2f", loan.getTotalPayment()));
public static void main(String[] args){ } LoanCalculator frame = new LoanCalculator(); frame.setTitle("贷款计算器"); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack();//依据放在框架中组件的大小来自动调整框架的大小 frame.setVisible(true);
}//public class LoanCalculator extends JFrame
class Loan{
public void setNumberOfYears(int numberOfYears){ } this.numberOfYears = numberOfYears; public Loan(double annualInterestRate, int numberOfYears, double loanAmount){ this.annualInterestRate = annualInterestRate; this.numberOfYears = numberOfYears; this.loanAmount = loanAmount; } loanDate = new java.util.Date(); private double annualInterestRate; private int numberOfYears; private double loanAmount; private java.util.Date loanDate; public Loan(){ this(2.5, 1, 1000); } public double getAnnualInterestRate(){ return annualInterestRate; } public void setAnnualInterestRate(double annualInterestRate){ this.annualInterestRate = annualInterestRate; } public int getNumberOfYears(){ } return numberOfYears;
public double getLoanAmount(){ } return loanAmount; public void setLoanAmount(double loanAmount){ } public double getMonthlyPayment(){ double monthlyInterestRate = annualInterestRate / 1200; this.loanAmount = loanAmount;
double monthlyPayment = loanAmount * monthlyInterestRate / (1 - (Math.pow(1 / (1 + monthlyInterestRate), numberOfYears * 12)));
} public java.util.Date getLoanDate(){ } return loanDate; } return monthlyPayment; public double getTotalPayment(){ } double totalPayment = getMonthlyPayment() * numberOfYears * 12; return totalPayment;
************* MoveMessageDemo.java****************
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MoveMessageDemo extends JFrame{
public static void main(String[] args){
public MoveMessageDemo(){ MovableMessagePanel p = new MovableMessagePanel("Java欢迎您"); setLayout(new BorderLayout()); add(p); } MoveMessageDemo frame = new MoveMessageDemo(); frame.setSize(200, 100); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("移动信息演示"); frame.setVisible(true);
} static class MovableMessagePanel extends JPanel { private String message = "Java欢迎您"; private int x = 20; private int y = 20; public MovableMessagePanel(String s){ message = s; } addMouseMotionListener( ); new MouseMotionAdapter(){ public void mouseDragged(MouseEvent e){ } } x = e.getX(); y = e.getY(); repaint(); protected void paintComponent(Graphics g){ super.paintComponent(g); g.drawString(message, x, y); } }//static class MovableMessagePanel extends JPanel
}//public class MoveMessageDemo extends JFrame
***************** TestWindowEvent.java******* import java.awt.event.*;
import javax.swing.JFrame;
public class TestWindowEvent extends JFrame{
public static void main(String[] args){ TestWindowEvent frame = new TestWindowEvent(); } public TestWindowEvent(){ frame.setSize(220, 80); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("测试窗口事件"); frame.setVisible(true);
addWindowListener(
);
}
} new WindowListener(){ public void windowDeiconified(WindowEvent event){ System.out.println("窗口最小化"); } public void windowIconified(WindowEvent event){ System.out.println("窗口还原"); } public void windowActivated(WindowEvent event){ System.out.println("窗口激活"); } public void windowDeactivated(WindowEvent event){ System.out.println("窗口变成非活动窗口"); } public void windowOpened(WindowEvent event){ System.out.println("窗口打开"); } public void windowClosing(WindowEvent event){ System.out.println("窗口正在关闭"); } public void windowClosed(WindowEvent event){ System.out.println("窗口关闭"); } }