Лучший способ найти точку на круге самой близкой к данной точке

Вы также можете попробовать интерпретатор BeanShell :

Interpreter interpreter = new Interpreter();
interpreter.eval("result = (7+21*6)/(32-27)");
System.out.println(interpreter.get("result"));

35
задан Matt Mitchell 21 November 2008 в 02:12
поделиться

7 ответов

где P является точкой, C является центром, и R является радиусом на подходящем "mathy" языке:

V = (P - C); Answer = C + V / |V| * R;

, где |V | является длиной V.

хорошо, OK

double vX = pX - cX;
double vY = pY - cY;
double magV = sqrt(vX*vX + vY*vY);
double aX = cX + vX / magV * R;
double aY = cY + vY / magV * R;

, легкий расширяться на> 2 размера.

61
ответ дан Mike Dunlavey 10 October 2019 в 12:07
поделиться

я сделал бы строку от центра до точки и calc, где тот график пересекает круг oO, я думаю не так трудный

8
ответ дан Johannes Schaub - litb 10 October 2019 в 12:07
поделиться

Решите его математически сначала, затем переведите в код. Помните, что самая короткая строка между точкой и краем круга также пройдет через свой центр (как указано @litb).

3
ответ дан Daniel Spiewak 10 October 2019 в 12:07
поделиться

Аккуратные функции, умножьтесь r и добавьте пкс или pY как соответствующих.

1
ответ дан Windows programmer 10 October 2019 в 12:07
поделиться

Рассматривайте центр проспекта как Ваш источник, преобразуйте координаты (пкс, pY) к полярным координатам, (тета, r') заменяют r' r исходного круга и преобразовывают назад в декартовы координаты (и корректируются для источника).

1
ответ дан Rob Walker 10 October 2019 в 12:07
поделиться

Вы попросили самый короткий код, таким образом, здесь это. В четырех строках это может быть сделано, хотя существует все еще квадратичное. Я рассмотрел вопрос, чтобы быть вне круга. Я не рассмотрел то, что происходит, если точка непосредственно выше или ниже центра круга, который является cX=pX.

m=(cY-pY)/(cX-pX);  //slope
b=cY-m*cX;  //or Py-m*Px.  Now you have a line in the form y=m*x+b
X=(  (2mcY)*((-2*m*cY)^2-4*(cY^2+cX^2-b^2-2*b*cY-r^2)*(-1-m^2))^(1/2)  )/(2*(cY^2+cX^2-b^2-2*bc*Y-r^2));
Y=mX+b;

1] Получают уравнение для строки, соединяющей точку и центр круга.

2] Проходят строка расстояние одного радиуса от центра для нахождения точки на круге. Это: radius=a^2+b^2, который является: r = (cY-Y) + (cX-X)), ^ (1/2)

3] Решают квадратично. X=quadratic_solver (r = (cY-Y) + (cX-X)) ^ (1/2), X) который, если Вы занимаете место в Y=m*X+b, Вы получаете тот ад выше.

4] X и Y являются Вашими результатами на круге.

я довольно уверен, что совершил ошибку где-нибудь, оставьте комментарий, если кто-либо находит что-то. Конечно, это является вырожденным, один ответ является самым далеким от Вашей точки, и другой является самым близким.

1
ответ дан Alex 10 October 2019 в 12:07
поделиться

Простой способ думать об этом с точки зрения изображения, и легкий превратиться в код: Возьмите вектор (пкс - cX, pY - cY) от центра до точки. Разделитесь на его длину sqrt (и тому подобное), умножьтесь радиусом. Добавьте это к (cX, cY).

1
ответ дан Mike Kantor 10 October 2019 в 12:07
поделиться
Другие вопросы по тегам:

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