Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Муратов
1 / 1 / 0
Регистрация: 17.08.2012
Сообщений: 62
#1

Окружность радиус которого является getEvent палец - Программирование Android

30.11.2013, 23:50. Просмотров 501. Ответов 5
Метки нет (Все метки)

здравствуйте! Есть вопрос, окружность радиус которого является getEvent палец, вокруг пальца отрисовывается круг, через палец он также получает getEvent для (y1 и y2 для sin альфа), а также (x1 и x2 для cos альфа).
Нужно получить Угол tg = (sin альфа/cos альфа). И как от рисовать круг через Convas.drawCircle чтобы получилось вот такой рисунок Окружность радиус которого является getEvent палец
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2013, 23:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Окружность радиус которого является getEvent палец (Программирование Android):

OnTouchListener и толстый дрожащий палец :) - Программирование Android
суть проблемы... жму в экран, двигаю, отпускаю, получаю события ACTION_DOWN, ACTION_UP, ACTION_MOVE... при длительном нажатии желаю...

PLAY при касании экрана и STOP когда палец убран - Программирование Android
Вот код . . . @Override public boolean onTouchEvent(MotionEvent event) { mpAudio = MediaPlayer.create(this,...

Изобразить на экране окружность и ее радиус; при нажатии на клавишу «Enter» радиус должен вращаться по часово - Free Pascal
Изобразить на экране окружность и ее радиус; при нажатии на клавишу «Enter» радиус должен вращаться по часовой стрелке.

Пусть элементами равносторонего треугольника является 1)Сторона а 2)плошядь S 3)высота H 4)радиус вписанной окружности r 5)радиус описсаной окружност - Delphi
Пусть элементами равносторонего треугольника является 1)Сторона а 2)плошядь S 3)высота H 4)радиус вписанной окружности r ...

Массив: Поменять местами столбец, произведение элементов которого является наименьшим, со столбцом, сумма элементов которого является наибольшей - Turbo Pascal
Дана матрица вещественных чисел. Поменять местами столбец, произведение элементов которого является наименьшим, со столбцом, сумма...

Поменять местами столбец, произведение элементов которого является наименьшим, со столбцом, сумма элементов которого является наибольшей - Turbo Pascal
Дана матрица вещественных чисел. Поменять местами столбец, произведение элементов которого является наименьшим, со столбцом, сумма...

5
Муратов
1 / 1 / 0
Регистрация: 17.08.2012
Сообщений: 62
10.12.2013, 15:02  [ТС] #2
получилось выложу код может кому нибудь пригодится, по нажатию по экрану появляется круг и в этом круге отрисовывается ещё один круг, идея была чтобы маленький круг не выходил за пределы большого круга, для этого нужно было уравнение окружности и высчитывание синуса угла и косинуса угла.
public class SingleTouchView extends View {



final int MIN_WIDTH = 75;
final int MIN_HEIGHT = 75;
final int DEFAULT_COLOR = Color.WHITE;
int _color;
final int STROKE_WIDTH = 2;

private Paint paint = new Paint();
public float x, y, x1, y1, k, b, Rad, d, EF, A, B, angle, angle1, number = 25, x2, y2, x3, y3, A1, B1, R1, cosalfa, RcosAlfa;
private boolean touching = false;
public boolean ViewFinal = false;
public boolean Final = false;
private float Radius = 100;
private float RadiusMin = 30;
public Drawable image;

public SingleTouchView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
init();
}

public SingleTouchView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
init();
}

public SingleTouchView(Context context) {
super(context);
// TODO Auto-generated constructor stub
init();
}

private void init() {
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);
paint.setColor(Color.DKGRAY);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),
MeasureSpec.getSize(heightMeasureSpec));
}

@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);

if (touching) {
//paint.setStrokeWidth(STROKE_WIDTH);
//paint.setColor(_color);
//paint.setStyle(Paint.Style.FILL);
//paint.setMaskFilter(new BlurMaskFilter(5, Blur.OUTER));

Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.unl2);
//Bitmap myBitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.unl1);
Bitmap myBitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.unl1);
canvas.drawBitmap(myBitmap, x3 - 25, y3 - 35, paint);

if(ViewFinal){
canvas.drawBitmap(myBitmap1, x2 - 25, y2 - 35, paint);
} else{
canvas.drawBitmap(myBitmap, x2 - 25, y2 - 35, paint);
}

canvas.drawCircle(x, y, RadiusMin, paint);

canvas.drawCircle(x1, y1, Radius, paint);

//canvas.drawCircle(x2, y2, 30f, paint);

//canvas.drawCircle(x3, y3, 30f, paint);
/*canvas.save();
image.draw(canvas);
canvas.restore();*/

}
}

public void setColor(int color) {
_color = color;
}

@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
// TODO Auto-generated method stub

switch (motionEvent.getAction()) {
case MotionEvent.ACTION_MOVE:
x = motionEvent.getX();
y = motionEvent.getY();
k = (y1-y)/(x1-x);
b = (x1*y-x*y1)/(x1-x);
Rad = (float) Math.sqrt(Math.pow((x1-x), 2) + Math.pow((y1 - y), 2));
d = Radius - RadiusMin;
EF = Radius + RadiusMin - d;

if((Math.pow((x1-x), 2) + Math.pow((y1-y), 2)) > Math.pow(Radius, 2)){
//x = k*x1+b;
//y = k*y1+b;

cosalfa = (float) ((float) (x-x1)/ Math.sqrt(Math.pow((y-y1), 2)+ Math.pow((x-x1), 2)));
R1 = (float) (Math.sqrt(Math.pow((y-y1), 2)+ Math.pow((x-x1), 2)));
RcosAlfa = Radius*cosalfa;
if(Rad*(1-cosalfa) > 0 && Rad*(1-cosalfa) < 15){
x = x1+Radius;
y = y1;
ViewFinal = true;
Final = true;

}
else if(Rad*(1-Math.abs(cosalfa)) > 0 && Rad*(1-Math.abs(cosalfa)) < 15){
x = x1-Radius;
y = y1;
} else {
x = Radius * cosalfa + x1;
y = Radius * (y-y1)/R1 + y1;
}





//y = (((y1-y)*(x1-x))/(x1-x)) + y;
//touching = false;
}
break;
case MotionEvent.ACTION_DOWN:
touching = true;
x = motionEvent.getX();
y = motionEvent.getY();
x1 = motionEvent.getX();
y1 = motionEvent.getY();
//for(int i = 0; i < number; i++){
angle = (float) ((float) 0 * (Math.PI*2));
angle1 = (float) ((float) (Math.PI*2) - Math.PI);
A = (float) ((float) Radius * Math.sin(angle));
B = (float) ((float) Radius * Math.cos(angle));
A1 = (float) ((float) Radius * Math.sin(angle1));
B1 = (float) ((float) Radius * Math.cos(angle1));
x2 = x + B;
y2 = y + A;
x3 = x + B1;
y3 = y + A1;

//}
break;
case MotionEvent.ACTION_UP:
touching = false;
ViewFinal = false;
Final = false;

default:
touching = false;
ViewFinal = false;
Final = false;
}
invalidate();
return true;
}

}
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
13.12.2013, 12:41 #3
Смутно понял задание и слишком большой код для "легкого чтива".
За код конечно спасибо, но можете четче задачу обьяснить?
круг между 2мя пальцами рисуете? один за центр - второй за радиус?
или вокруг одного пальца кружок пытаетесь нарисовать?
0
Муратов
1 / 1 / 0
Регистрация: 17.08.2012
Сообщений: 62
13.12.2013, 13:38  [ТС] #4
2 круга рисуется с одного пальца, палец является своего рода центром, маленький круг с меньшим чтобы он за пределы второго большого круга с большим радиусом не выходил, а оставался в круге даже если палец находится вне круга. например палец вышел за пределы большого круга то маленький круг останется в большом круге только по направлению пальца
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
13.12.2013, 13:48 #5
а-а-а... вариант джостика? Оригинально... Интересный компонент получится... Часто в играх такой используют... Но если честно по первому Вашему сообщению догадаться было не реально! И рисунок тоже не помог.
0
Муратов
1 / 1 / 0
Регистрация: 17.08.2012
Сообщений: 62
13.12.2013, 14:09  [ТС] #6
да вариант джостика! если программируете игры для android или на unity 3d можете использовать
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2013, 14:09
Привет! Вот еще темы с ответами:

Найти площадь кольца, внутренний радиус которого равен R1, а внешний радиус равен R2 - Turbo Pascal
Найти площадь кольца, внутренний радиус которого равен R1, а внешний радиус равен R2 (R1 &lt; R2) Решить в паскале) Плиз решите пожалуйста,...

Найти площадь кольца, внутренний радиус которого равен R. А внешний радиус равен R2 - Turbo Pascal
Найти площадь кольца, внутренний радиус которого равен R. А внешний радиус равен R2 (R1&lt;R2). В качестве значения Pi использовать 3.14

Найти площадь кольца, внутренний радиус которого равен R1, а внешний радиус равен R2 (R1 <R2) - C++
Найти площадь кольца, внутренний радиус которого равен R1, а внешний радиус равен R2 (R1 &lt;R2). #include &lt;iostream&gt; #include...

Найти площадь кольца, внутренний радиус которого равен R1, а внешний радиус равен R2 - C++
3 Найти площадь кольца, внутренний радиус которого равен R1, а внешний радиус равен R2 (R1 меньше R2). В качестве значения Pi использовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
13.12.2013, 14:09
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru