void Line :: computeIntersectionPoints(Element *element, std :: vector< FloatArray > &oIntersectionPoints) { for ( int i = 1; i <= element->giveNumberOfDofManagers(); i++ ) { int n1 = i; int n2 = 0; if ( i < element->giveNumberOfDofManagers() ) { n2 = i + 1; } else { n2 = 1; } double lsn1 = computeDistanceTo( element->giveDofManager(n1)->giveCoordinates() ); double lsn2 = computeDistanceTo( element->giveDofManager(n2)->giveCoordinates() ); double lst1 = computeTangentialDistanceToEnd( element->giveDofManager(n1)->giveCoordinates() ); double lst2 = computeTangentialDistanceToEnd( element->giveDofManager(n2)->giveCoordinates() ); if ( lsn1 * lsn2 <= 0 && lst1 <= 0 && lst2 <= 0 ) { double r = lsn1 / ( lsn1 - lsn2 ); if ( i <= element->giveNumberOfDofManagers() ) { FloatArray answer(2); for ( int j = 1; j <= answer.giveSize(); j++ ) { answer.at(j) = ( 1 - r ) * element->giveDofManager(n1)->giveCoordinate(j) + r *element->giveDofManager(n2)->giveCoordinate(j); } oIntersectionPoints.push_back(answer); } } } }
void Line :: computeIntersectionPoints(Element *element, std :: vector< FloatArray > &oIntersectionPoints) { const FloatArray &p1 = mVertices[0]; const FloatArray &p2 = mVertices[1]; for ( int i = 1; i <= element->giveNumberOfDofManagers(); i++ ) { int n1 = i; int n2 = 0; if ( i < element->giveNumberOfDofManagers() ) { n2 = i + 1; } else { n2 = 1; } const FloatArray &q1 = *(element->giveDofManager(n1)->giveCoordinates()); const FloatArray &q2 = *(element->giveDofManager(n2)->giveCoordinates()); FloatArray intersecPoint; bool intersects = false; computeLineDistance(p1, p2, q1, q2, &intersecPoint, &intersects); if(intersects) { oIntersectionPoints.push_back(intersecPoint); } #if 0 double lsn1 = computeDistanceTo( element->giveDofManager(n1)->giveCoordinates() ); double lsn2 = computeDistanceTo( element->giveDofManager(n2)->giveCoordinates() ); double lst1 = computeTangentialDistanceToEnd( element->giveDofManager(n1)->giveCoordinates() ); double lst2 = computeTangentialDistanceToEnd( element->giveDofManager(n2)->giveCoordinates() ); if ( lsn1 * lsn2 <= 0 && lst1 <= 0 && lst2 <= 0 ) { double r = lsn1 / ( lsn1 - lsn2 ); if ( i <= element->giveNumberOfDofManagers() ) { FloatArray answer(2); for ( int j = 1; j <= answer.giveSize(); j++ ) { answer.at(j) = ( 1 - r ) * element->giveDofManager(n1)->giveCoordinate(j) + r *element->giveDofManager(n2)->giveCoordinate(j); } oIntersectionPoints.push_back(answer); } } #endif } }
void Node::connectWith(Node* otherNode) { Link newNode; newNode.linkedNode = otherNode; newNode.distance = computeDistanceTo(otherNode); m_connectedNodes.push_back(newNode); //anders rum newNode.linkedNode = this; otherNode->m_connectedNodes.push_back(newNode); }