Guest User

Untitled

a guest
Feb 20th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.math.*;
  4. import javax.swing.*;
  5. import javax.swing.event.*;
  6.  
  7. public class Sierpinski extends JPanel
  8. {
  9. private static final int DRAW_LEVEL = 128;
  10. private static final int RECT_SIZE = 4;
  11.  
  12. public static void main(String args[])
  13. {
  14. final Sierpinski s = new Sierpinski();
  15.  
  16. final JFrame jf = new JFrame("Sierpinski triangle");
  17. jf.setSize(new Dimension(RECT_SIZE * DRAW_LEVEL + 30, RECT_SIZE * DRAW_LEVEL + 80));
  18. jf.setLayout(new BorderLayout());
  19. jf.add(s, BorderLayout.CENTER);
  20. JSlider slider = new JSlider(SwingConstants.HORIZONTAL, 2, 32, 2);
  21. slider.addChangeListener(new ChangeListener() {
  22. public void stateChanged(ChangeEvent ce)
  23. {
  24. JSlider js = (JSlider)ce.getSource();
  25. s.divNumber = js.getValue();
  26. jf.repaint();
  27. }
  28. });
  29. slider.setPaintTicks(true);
  30. slider.setMajorTickSpacing(1);
  31. slider.setMinorTickSpacing(1);
  32. slider.setPaintLabels(true);
  33. slider.setSnapToTicks(true);
  34. jf.add(slider, BorderLayout.NORTH);
  35. jf.setVisible(true);
  36. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  37. }
  38.  
  39. public int divNumber = 2;
  40.  
  41. public void drawPascal(Graphics g, int level)
  42. {
  43. if(level == 0)
  44. {
  45. // 何もしない
  46. }
  47. else
  48. {
  49. int x = ((RECT_SIZE * DRAW_LEVEL + 30) / 2) - ((RECT_SIZE / 2) * level);
  50. int y = (level - 1) * RECT_SIZE;
  51. for(int i=0; i<level; i++)
  52. {
  53. BigInteger combination = combination((level-1), i);
  54. if(combination.mod(BigInteger.valueOf(divNumber)).equals(BigInteger.ZERO))
  55. {
  56. // 偶数は塗らない
  57. g.drawRect(x + (i * RECT_SIZE), y, RECT_SIZE, RECT_SIZE);
  58. }
  59. else
  60. {
  61. // 奇数は塗る
  62. g.fillRect(x + (i * RECT_SIZE), y, RECT_SIZE, RECT_SIZE);
  63. }
  64. }
  65.  
  66. drawPascal(g, (level - 1));
  67. }
  68. }
  69.  
  70. public void paint(Graphics g)
  71. {
  72. drawPascal(g, DRAW_LEVEL);
  73. }
  74.  
  75. public BigInteger combination(int n, int k)
  76. {
  77. BigInteger bunsi = fact(BigInteger.valueOf(n));
  78. BigInteger bunbo1 = fact(BigInteger.valueOf(n-k));
  79. BigInteger bunbo2 = fact(BigInteger.valueOf(k));
  80. BigInteger bunbo = bunbo1.multiply(bunbo2);
  81.  
  82. return bunsi.divide(bunbo);
  83. }
  84.  
  85. public BigInteger fact(BigInteger n)
  86. {
  87. if(n.equals(BigInteger.ZERO))
  88. {
  89. return BigInteger.ONE;
  90. }
  91. else
  92. {
  93. return n.multiply(fact(BigInteger.valueOf(n.intValue() - 1)));
  94. }
  95. }
  96. }
Add Comment
Please, Sign In to add comment