Задать вопрос
@savoid

Как реализовать кривые бизье на 3,4,5 точек, когда есть на 6?

Есть код на 6 точек Бизье, что изменить, чтобы можно было реализовать тоже самое на 3,4,5 точек. Тоесть использовать тот же код, только на меньшее количество точек.

Bizje.java
import javax.swing.JFrame;
import javax.swing.JPanel;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

import java.awt.Graphics;

public class Bizje extends JPanel {
	Coordinates[] points;
	Bizje(Coordinates[] points){
		this.points = points;
	}
	public static void bezier6(Coordinates[] points,Graphics g) {
		double t = 0.2, ts = 0.01;
		
		while(t <= 1) {
			double bn[] = {
/*1*/		-Math.pow((t-1), 5),
/*2*/		5 * t * Math.pow(((1-t)), 4),
/*3*/		-10 * Math.pow((t),2)*Math.pow((1-t), 3),
/*4*/		10 * Math.pow((t),3)*Math.pow((1-t), 2),
/*5*/		-Math.pow((t),4)*(-5 + 5*t),
/*6*/		Math.pow((t), 5)
			};
			double x = 0,y = 0;
			for (int i =0; i < points.length; i++) {
				x += points[i].x * bn[i];
				y += points[i].y * bn[i];
			}
			g.drawRect((int) x,(int) y, 1, 1);
			t += ts;
		}
	}

	
	public static void main(String[] args) {
		Coordinates []points = {new Coordinates(2,5),
				new Coordinates(6, 1),
				new Coordinates(8, 3),
				new Coordinates(13, 12),
				new Coordinates(21, 10),
				new Coordinates(27, 21)
			};

		
		JFrame window = new JFrame("Brez");
        window.setSize(100,100);
        window.setContentPane(new Bizje(points));
        window.setDefaultCloseOperation(EXIT_ON_CLOSE);
        window.setVisible(true);	
	}
	public void paintComponent(Graphics g){
        super.paintComponents(g);
     
       
		
		/*
		 * Coordinates []points = {new Coordinates(2,5), new Coordinates(6,1), new
		 * Coordinates(2,3), new Coordinates(13,12), new Coordinates(21,10), new
		 * Coordinates(27,21) };
		 */
 
    	 bezier6(points,g);
	}
	
}


Coordinates.java
public class Coordinates {
	int x,y;
	Coordinates(int x, int y){
		this.x = x;
		this.y = y;
	}
}
  • Вопрос задан
  • 56 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы