Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.48 KB | None | 0 0
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package bezier;
  7.  
  8. import static bezier.Main.jb;
  9. import static bezier.Main.jp;
  10. import java.awt.Color;
  11. import java.awt.Dimension;
  12. import java.awt.Graphics;
  13. import java.awt.Graphics2D;
  14. import java.awt.GridBagLayout;
  15. import java.awt.Image;
  16. import java.awt.event.ActionEvent;
  17. import java.awt.event.ActionListener;
  18. import java.awt.event.MouseEvent;
  19. import java.awt.event.MouseListener;
  20. import java.awt.event.MouseMotionListener;
  21. import java.awt.geom.Ellipse2D;
  22. import java.awt.image.BufferedImage;
  23. import java.util.ArrayList;
  24. import javax.swing.JButton;
  25. import javax.swing.JFileChooser;
  26. import javax.swing.JFrame;
  27. import javax.swing.JPanel;
  28.  
  29. /**
  30. *
  31. * @author Bibi
  32. */
  33. class MyPanel extends JPanel implements MouseListener, MouseMotionListener {
  34.  
  35. static ArrayList<Integer> xPoints, yPoints, x, y, pointsListX, pointsListY;
  36. static ArrayList<Ellipse2D.Double> shapes;
  37. int startX = 0, startY = 0, endX, endY;
  38. int index = 0, pos = -1;
  39. boolean needClear = false;
  40.  
  41. public static double countNewton(double n, int k) {
  42. double Wynik = 1; // Deklaracja zmiennych
  43. int i;
  44.  
  45. for (i = 1; i <= k; i++) // Od 1 do k wykonujemy :
  46. {
  47. Wynik = Wynik * (n - i + 1) / i; // Obliczanie ze wzoru iteracyjnego
  48. }
  49.  
  50. return Wynik; // Zwróć Wynik
  51. }
  52.  
  53. public void bezierCalc(int degree, int clickCounter) {
  54. for (double p = 0; p <= 1; p += 0.1) {
  55. double xPoint = 0;
  56. for (int i = 0; i <= degree; ++i) {
  57. double Newton = countNewton(degree, i); //Obliczamy wartość współczynnika Newtona
  58. double ti = Math.pow(p, i); //Pierwszy element wzoru t do potęgi i-tej
  59. double lti = Math.pow((1 - p), (degree - i)); //Drugi element wzoru (1-t) do potęgi (ni)
  60. xPoint = xPoint + (Newton * ti * lti * x.get(i)); //Tworzymy składową x-ową
  61. }
  62. if (xPoint > x.get(clickCounter - 1)) {
  63. break;
  64. }
  65.  
  66. xPoints.add((int) xPoint);
  67. double yPoint = 0;
  68. for (int i = 0; i <= degree; ++i) {
  69. double yNewton = countNewton(degree, i);
  70. double yti = Math.pow(p, i);
  71. double ylti = Math.pow((1 - p), (degree - i));
  72. yPoint = yPoint + (yNewton * yti * ylti * y.get(i));
  73. }
  74. yPoints.add((int) yPoint);
  75. }
  76. }
  77.  
  78. public MyPanel() {
  79. this.addMouseListener(this);
  80. this.addMouseMotionListener(this);
  81. pointsListX = new ArrayList<>();
  82. pointsListY = new ArrayList<>();
  83. shapes = new ArrayList<>();
  84. xPoints = new ArrayList<>();
  85. yPoints = new ArrayList<>();
  86. x = new ArrayList<>();
  87. y = new ArrayList<>();
  88. jb.addActionListener(new ActionListener() {
  89. @Override
  90. public void actionPerformed(ActionEvent e) {
  91. needClear = true;
  92. //System.out.println("Degree = " + degree);
  93. try {
  94. bezierCalc(x.size() - 1, x.size());
  95. } catch (ArrayIndexOutOfBoundsException abc) {
  96. }
  97. repaint();
  98. }
  99. });
  100. }
  101.  
  102. @Override
  103. public void paintComponent(Graphics g) {
  104. super.paintComponent(g);
  105. Graphics2D g2 = (Graphics2D) g;
  106. if (pointsListX.size() > 0) {
  107. for (int a = 0; a < shapes.size(); a++) {
  108. g2.setPaint(Color.red);
  109. g2.fill(shapes.get(a));
  110. g2.setPaint(Color.BLACK);
  111. }
  112. }
  113. int[] xs, ys;
  114. xs = new int[xPoints.size()];
  115. ys = new int[yPoints.size()];
  116. for (int a = 0; a < xPoints.size(); a++) {
  117. xs[a] = xPoints.get(a);
  118. ys[a] = yPoints.get(a);
  119. }
  120. //System.out.println(startX + " " + startY + " " + endX + " " + endY);
  121. g.drawPolyline(xs, ys, xPoints.size());
  122. g.dispose();
  123. }
  124.  
  125. @Override
  126. public void mouseClicked(MouseEvent e) {
  127. }
  128.  
  129. @Override
  130. public void mousePressed(MouseEvent e) {
  131. boolean contains = false;
  132.  
  133. for (int i = 0; i < shapes.size(); i++) {
  134. if (shapes.get(i).intersects(e.getX(), e.getY(), 5, 5)) {
  135. contains = true;
  136. pos = i;
  137. return;
  138. }
  139. }
  140. if (!contains) {
  141. if (needClear) {
  142. xPoints.clear();
  143. yPoints.clear();
  144. pointsListX.clear();
  145. pointsListY.clear();
  146. x.clear();
  147. y.clear();
  148. shapes.clear();
  149. needClear = false;
  150. }
  151. //Point point2 = new Point(e.getX(), e.getY());
  152. x.add(e.getX());
  153. y.add(e.getY());
  154.  
  155. pointsListX.add(e.getX());
  156. pointsListY.add(e.getY());
  157. Ellipse2D.Double el = new Ellipse2D.Double(e.getX(), e.getY(), 10, 10);
  158. shapes.add(el);
  159. //System.out.println("Point: " + point2.toString());
  160. repaint();
  161. }
  162. }
  163.  
  164. @Override
  165. public void mouseReleased(MouseEvent e) {
  166. pos = -1;
  167. }
  168.  
  169. @Override
  170. public void mouseEntered(MouseEvent e) {
  171. }
  172.  
  173. @Override
  174. public void mouseExited(MouseEvent e) {
  175. }
  176.  
  177. @Override
  178. public void mouseDragged(MouseEvent e) {
  179. if (pos == -1) {
  180. return;
  181. }
  182. shapes.get(pos).setFrame(e.getX(), e.getY(), shapes.get(pos).getWidth(), shapes.get(pos).getHeight());
  183. x.set(pos, e.getX());
  184. y.set(pos, e.getY());
  185. try {
  186. xPoints.clear();
  187. yPoints.clear();
  188. bezierCalc(x.size() - 1, x.size());
  189. } catch (ArrayIndexOutOfBoundsException abc) {
  190. }
  191. repaint();
  192. }
  193.  
  194. @Override
  195. public void mouseMoved(MouseEvent e) {
  196. }
  197.  
  198. }
  199.  
  200. public class Main {
  201.  
  202. public static int value;
  203. static JButton jb;
  204. JFrame jf;
  205. static JPanel jp, container, container2;
  206. JFileChooser fc;
  207. BufferedImage bf, bf2;
  208. Image img;
  209.  
  210. public Main() {
  211. value = 0;
  212. fc = new JFileChooser();
  213. jf = new JFrame("Zadanie 6");
  214. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  215. jf.setSize(new Dimension(1280, 1024));
  216. jb = new JButton("DRAW");
  217. // JLabel bezierDegreePanel = new JLabel("Degree:");
  218. // bezierDegreePanel.setForeground(Color.white);
  219. jp = new JPanel();
  220. container = new MyPanel();
  221. container.setPreferredSize(new Dimension(500, 500));
  222. jp.setPreferredSize(new Dimension(1280, 1024));
  223. jp.setBackground(Color.DARK_GRAY);
  224. jp.setLayout(new GridBagLayout());
  225. jf.add(jp);
  226.  
  227. //JTextField tf = new JTextField();
  228. //tf.setPreferredSize(new Dimension(100, 30));
  229. //if(!tf.getText().equals("")) value=Integer.parseInt(tf.getText());
  230. //jp.add(bezierDegreePanel);
  231. //jp.add(tf);
  232. jp.add(jb);
  233. jp.add(container);
  234. //jp.add(container2);
  235. jf.pack();
  236. jf.setVisible(true);
  237. }
  238.  
  239. /**
  240. * @param args the command line arguments
  241. */
  242. public static void main(String[] args) {
  243. new Main();
  244. }
  245.  
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement