IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Поворот треугольника, Java2
Altair
сообщение 13.11.2006 0:56
Сообщение #1


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Есть треугольник.
Нужно поворачивать его.

Задаю я его так.
3 точки.
Есть координаты curX и curY это координаты реальные на экране.
А x1,y1, x2,y2, x3,y3 - это координаты треугольника относительно точки (0,0)
которая при выводе треугольника равна curX, xurY

Как повернуть треугольнк скажем по часовой стрелки, например вокруг этой точки (0,0)

Вот у меня что...
package mainpack;

import java.awt.Color;
import java.awt.Graphics;
import java.math.*;
import java.util.Random;


public class NewThread implements Runnable{
	
	Thread t;
	Thread mainTh;
	// данные полигона
	boolean isLife = true;
	// цвет
	Color polColor = Color.black;
	public void setColor(Color x) {
		this.polColor = x;
	}
	public Color getColor() {
		return this.polColor;
	}
	// количество точек
	int PointCount=3;
	// координаты точек	
	protected PointXY thePoint[] = new PointXY[PointCount];
	// данные о движении
	int curX=0,curY=0;
	public int speedUp=0, speedLeft=0;
	public double xan=0.001;
	//нужно ли поворачивать
	boolean isRotate = false;
	// действия над объектом
	public void moveUpDown() {
		if (this.curY > 0) {
			this.curY = this.curY - speedUp;
		}		
	}
	public void moveLeftRight() {
		if (this.curX >0) {
			this.curX = this.curX - speedLeft;
		}		
	}
	public void draw(Graphics g) {
		g.drawLine(this.curX+thePoint[0].getX(),this.curY + thePoint[0].getY(),
				this.curX +thePoint[1].getX() , this.curY +thePoint[1].getY());
		g.drawLine(this.curX+thePoint[1].getX(),this.curY + thePoint[1].getY(),
				this.curX +thePoint[2].getX() , this.curY +thePoint[2].getY());
		g.drawLine(this.curX+thePoint[2].getX(),this.curY + thePoint[2].getY(),
				this.curX +thePoint[0].getX() , this.curY +thePoint[0].getY());
	}
	 
	NewThread(int x1,int y1,int x2,int y2,int x3,int y3) {
		// инициализация полигона
		thePoint[0] = new PointXY(x1,y1);
		thePoint[1] = new PointXY(x2,y2);
		thePoint[2] = new PointXY(x3,y3);
		Random rnd = new Random();
		this.curX = rnd.nextInt(100); 
		this.curY = rnd.nextInt(100);
		if (curX < 20){curX*=3;}
		if (curY < 20){curY*=3;}
		//создание потока
		t = new Thread(this,"Polygon");
		//запуск потока
		t.start();		
	}
	public void calc() {
		for (int i=0; i<=2; i++) {
			double x = this.thePoint[i].getX();
			double y = this.thePoint[i].getY();
			double r = Math.sqrt( x*x + y*y);
			x = r*Math.cos(xan);
			y = r*Math.cos(xan);
			this.thePoint[i].setX((int)Math.round(x));
			this.thePoint[i].setY((int)Math.round(y));	
		}
		xan+=0.001;
	}
	public void run() {
		try {
			// описание поведения объекта
			while (isLife) {
				moveUpDown();
				moveLeftRight();
				//if (this.isRotate) {calc(); }
				calc();
				Thread.sleep(100);
			}
		} catch (InterruptedException e) {
			//System.out.println("Interrupt");
		}
		//System.out.println("Halt");
	}
}


Метод calc должен вычислять поворот каждой точки, но почему то треугольник быстро уползает куда то а не поворачивается.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 1.08.2025 20:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"