Olá, vou tentar ajudar, se é que entendi o problema.
O segmento vermelho tem extremidades P1=(x1,y1) e P2=(x2,y2).
Para 0 <= x <= 800, temos:
x1 = x-100
x2 = x
y1 = y2 = 0
Para 800 < x <= 850, temos:
A posição de P2 é:
x2 = x
y2 = 50 - raiz_quad(50^2 - (x2-800)^2) # ajustado para subir de 0 até 50
A posição de P1, nesse intervalo, é tal que:
P1=(x1, 0) e a distância a P2 é igual a 100:
100 = raiz_quad((x2-x1)^2 + y2^2)
Como sabemos o valor de x2 e y2 obteremos x1.
Quando x2 chegar em 850, estaciona, y2 crescerá a partir de 50.
Quando y2 chegar em 87, x1 terá chegado em 800.
Daí, y1 passa a obedecer a expressão: y1 = 50 - raiz_quad(50^2 - (x1-800)^2) # ajustado para subir de 0 até 50
Com isso dá para calcular o centro = (P1+P2)/2, coordenada a coordenada.
A inclinação do segmento é a tangente (y2-y1)/(x2-x1).
Com isso consegue o ângulo.
Se ficou complicado, posta aí pra gente ir discutindo as partes.
Eu, até fiz um código em Python para o posicionamento de todos os P2 para 0 <= x2 <= 850, veja:
- Código:
import numpy as np
import matplotlib.pyplot as plt
def f(X):
Y = np.zeros(100)
i = -1
for x in X:
i = i + 1
if x < 800:
Y[i] = 0
else:
Y[i] = 50 - np.sqrt(50**2 - (x-800)**2)
return Y
X = np.linspace(0,849, 100)
Y = f(X)
plt.axis('equal')
plt.plot(X,Y)
plt.show()