Problemas geométricos, resolvidos analiticamente utilizando técnicas de álgebra, são parte integrante do programa escolaridade. Além do pensamento lógico e espacial, eles desenvolvem uma compreensão das principais relações entre as entidades do mundo circundante e das abstrações usadas pelas pessoas para formalizar as relações entre elas. Encontrando pontos cruzamentos as figuras geométricas mais simples são um dos tipos de problemas.
Suponha que recebamos dois círculos, especificados por seus raios R e r, bem como pelas coordenadas de seus centros - (x1, y1) e (x2, y2), respectivamente. Você precisa calcular se esses círculos se cruzam e, em caso afirmativo, encontrar as coordenadas dos pontos cruzamentos.Para simplificar, podemos assumir que o centro de um dos dados círculos coincide com a origem. Então (x1, y1) = (0, 0) e (x2, y2) = (a, b). Também faz sentido assumir que a? 0 eb? 0.
Assim, as coordenadas do ponto (ou pontos) cruzamentos círculos, se existirem, devem satisfazer um sistema de duas equações: x^2 + y^2 = R^2,
(x - a) ^ 2 + (y - b) ^ 2 = r ^ 2.
Depois de abrir os colchetes, as equações assumem a forma: x^2 + y^2 = R^2,
x^2 + y^2 - 2ax - 2by + a^2 + b^2 = r^2.
Agora a primeira equação pode ser subtraída da segunda. Assim, os quadrados das variáveis desaparecem e aparece equação linear: -2ax - 2por = r^2 - R^2 - a^2 - b^2. Com sua ajuda, você pode expressar y através de x:y = (r^2 - R^2 - a^2 - b^2 - 2ax)/2b.
Se substituirmos a expressão encontrada por y na equação do círculo, o problema se reduz a resolver Equação quadrática: x^2 + px + q = 0, ondep = -2a/2b,
q = (r^2 - R^2 - a^2 - b^2)/2b - R^2.
As raízes desta equação nos permitirão encontrar as coordenadas dos pontos cruzamentos círculos. Se a equação for insolúvel em numeros reais, então os círculos não se cruzam. Se as raízes coincidirem, os círculos se tocam. Se as raízes forem diferentes, os círculos se cruzam.
Se a = 0 ou b = 0, então as equações originais são simplificadas. Por exemplo, com b = 0, o sistema de equações terá a forma: x^2 + y2 = R^2,
(x - a)^2 + y^2 = r^2.
Depois de subtrair a primeira equação da segunda, obtemos: - 2ax + a ^ 2 = r ^ 2 - R ^ 2. Sua solução: x = - (r ^ 2 - R ^ 2 - a2)/2a. Obviamente, no caso de b = 0, os centros de ambos círculos estão no eixo das abcissas e em seus pontos cruzamentos haverá a mesma abscissa.
Se a = 0 e b = 0, mas R ? r, então um dos círculos está obviamente localizado dentro de outro, e o ponto cruzamentos estão faltando. Se R = r, então os círculos coincidem e seus pontos cruzamentos infinitamente muitos.
Se nenhum dos dois círculos o centro não coincide com a origem, então suas equações serão semelhantes a: (x - x1)^2 + (y - y1)^2 = R^2,
(x - x2) ^ 2 + (y - y2) ^ 2 = r ^ 2. Se passarmos para novas coordenadas obtidas das antigas pelo método de tradução paralela: x? = x + x1, y? = y + y1, então essas equações assumem a forma: x?^2 + y?^2 = R^2,
(x? - (x1 + x2))^2 + (y? - (y1 + y2))^2 = r^2. O problema reduz-se assim ao anterior. Tendo encontrado soluções para x? e y?, você pode retornar facilmente às coordenadas originais invertendo as equações para tradução paralela.
Então, minha tarefa foi calcular a área de uma figura que é a intersecção de círculos, seguida de implementação em JavaScript. A área sob o gráfico é a integral. A integração pelo método de Monte Carlo é bastante conhecida, mas, como muitos notarão corretamente, a sua aplicação requer alguma justificação. Para obter detalhes, consulte gato.
Mas as soluções para o caso geral da intersecção de até três círculos estão longe de ser tão triviais. Durante a busca, até encontrei estudos sobre cálculo de área de intersecção de N círculos, mas são tão interessantes quanto complexos.
É aqui que entra o método Monte Carlo. Graças ao poder do computador moderno, este método permite um grande número de testes estatísticos, a partir dos resultados dos quais é feita uma generalização.
Assim, o algoritmo para calcular a área de qualquer figura pelo método Monte Carlo se resume ao seguinte:
Coletando uma série de interseções de pares de círculos
var nós = d3.selectAll("círculo.node"); var quadrados = ; var interseções = ; nodes.each(function(node)( // calcula o raio e a área do círculo var r = this.r.baseVal.value; var s = 3.14159*r*r; squares.push((node: node, square: s, r : r)); // procura por interseções de pares de círculos nodes.each(function(node2)( // distância entre centros e soma dos raios var center_dist = Math.sqrt(Math.pow(node. x-node2.x, 2)+ (Math.pow(node.y-node2.y, 2))); var radius_sum = r + this.r.baseVal.value; if(center_dist<= radius_sum && node.index != node2.index){
// окружности пересекаются. проверить, что это пересечение найдено впервые
node.r = r;
node2.r = this.r.baseVal.value;
if(isNewIntersection(intersections, node, node2))
intersections.push({node1: node, node2: node2, center_dist: center_dist});
}
});
});
Calcule a área da figura
var areaCalculator = (interseções: , // array de interseções, definido fora do quadro: (), // quadro ao redor da figura círculos: , // array de círculos figureArea: 0, // área necessária da figura monteCarlo: função (p)( // obtém a matriz de círculos da interseção var circles = ; var x1_, y1_, x2_, y2_; // coordenadas dos lados do retângulo var inCirclesArr = function(node)( for(var j=0; j X_rand && (círculos[j].y-círculos[j].r)<= y_rand &&
(circles[j].y+circles[j].r) >= y_rand))( sim = verdadeiro; p_positivo++; ) ) ) // área da figura = área do retângulo*número de pontos dentro da figura / número total de pontos this.figureArea = this.frame.area *p_positivo/p; )); Sejam dois círculos dados por suas equações: (X-X A) 2 +(Y-Y A) 2 =S 2 A; (X-X B) 2 +(YY B) 2 =S 2 B. Ao mesmo tempo, o ponto A com coordenadas (XA; YA)é o centro do primeiro círculo, e SAé o raio deste círculo. Assim, aponte EM com coordenadas (X B; Y B)é o centro do segundo círculo, e SB-raio do segundo círculo. A determinação das coordenadas dos pontos de intersecção desses círculos (e no caso geral são dois) pode ser obtida resolvendo as equações apresentadas. No entanto, do ponto de vista computacional, este método de solução é bastante trabalhoso. A este respeito, usaremos uma técnica ligeiramente diferente e calcularemos não as coordenadas dos pontos necessários, mas os incrementos das coordenadas em relação aos centros dos círculos dados. Vejamos atentamente a Fig. 2.3. Para determinar as coordenadas de t. Pé necessário saber o ângulo direcional de direção QA e a distância entre esses pontos A E P. Resolvendo um problema geodésico direto, podemos encontrar as coordenadas de um ponto Q. Distância do ponto A ao ponto P conhecido - este é o raio do primeiro círculo SA. Ângulo de direção direcional QA pode ser calculado usando a fórmula α AQ =α AB -β A (2.13) Se o ponto desejado Q estiver localizado à ESQUERDA da direção original AB, então o ângulo direcional é obtido como a DIFERENÇA; Se o ponto desejado F estiver localizado à DIREITA da direção original AB, então o ângulo direcional é obtido como SOMA. Usaremos a segunda regra ao encontrar o ângulo direcional de direção A.F.:. α AF = α AB + β A (2.14) Ângulo direcional α direção AB AB obtemos da solução do problema geodésico inverso usando as coordenadas conhecidas dos pontos A E EM. Resta resolver a questão relativa ao cálculo do ângulo β A . Podemos realizar um raciocínio semelhante em relação ao cálculo dos incrementos de coordenadas ao longo das linhas churrasco E B. F.. Comprimentos de linha churrasco E B. F. são iguais ao raio do segundo círculo S B, e os ângulos direcionais dessas direções podem ser calculados usando as fórmulas: αBA =αBA +βB; (2.15) α BF =α BA -β B . (2.16) Figura 2.3. Determinação das coordenadas dos pontos de intersecção de dois círculos. Preste atenção aos sinais com os quais o ângulo β B está incluído nessas fórmulas! Lembre-se de como calcular o ângulo direcional αBA, se o ângulo direcional α for conhecido AB. Aqui a questão sobre o tamanho do ângulo também permanece em aberto βB. Esses ângulos podem ser calculados usando as fórmulas: Lembre-se por que os triângulos AKQ E BKQ- retangular! Considerando que para os triângulos indicados QK- lado comum, podemos escrever a seguinte igualdade: S 2 A -AK 2 =S 2 B -BK 2. Anexando à última igualdade a igualdade óbvia AK+BK=AB, obtemos um sistema de duas equações com duas incógnitas. Tendo resolvido este sistema (executar a solução de forma independente), obtemos Os cálculos podem ser controlados usando a fórmula AK+BK=AB. Usando as fórmulas (2.17) e (2.18), calculamos os ângulos auxiliares β e β B . Então, usando as fórmulas (2.14) - (2.16), calculamos os ângulos direcionais das direções QA, A.F., churrasco E B. F.. Ainda de acordo com as fórmulas calculamos incrementos de coordenadas e controlamos as coordenadas dos pontos P E F.Algumas unhas no método Bootstrap
Se falarmos especificamente do método Bootstrap, minha opinião pessoal é que a geração aleatória de um conjunto de dados a partir de um conjunto existente, em geral, não pode servir para avaliar padrões, uma vez que as informações geradas não são confiáveis. Em geral, muitos autores dizem a mesma coisa, apenas com palavras mais inteligentes (e muitas vezes mais duras), por exemplo,