public static bool CorrespondenceOfCirclesInCylinderRot(double teta, double[] axisDirection, double[] translationalVector, List <MyCircle> listOfCircleFirst, List <MyCircle> listOfCircleSecond) { const string nameFile = "GetRotationalPatterns.txt"; var numOfCircleFirst = listOfCircleFirst.Count; var numOfCircleSecond = listOfCircleSecond.Count; // OBSERVATION: int i, j are such that 0<=i,j<=2 if (numOfCircleFirst > 0) { int i = 0; // for every circle of first cylinder while (i < numOfCircleFirst) { var firstCenter = listOfCircleFirst[i].centerCircle; var firstCenterTranslated = new MyVertex(firstCenter.x + translationalVector[0], firstCenter.y + translationalVector[1], firstCenter.z + translationalVector[2]); int j = 0; var thisCircleIsOk = false; while (thisCircleIsOk == false && j < numOfCircleSecond) { var secondCenter = listOfCircleSecond[j].centerCircle; var secondCenterTranslated = new MyVertex(secondCenter.x + translationalVector[0], secondCenter.y + translationalVector[1], secondCenter.z + translationalVector[2]); thisCircleIsOk = secondCenterTranslated.IsRotationOf(firstCenterTranslated, teta, axisDirection); if (thisCircleIsOk) { listOfCircleSecond.RemoveAt(j); } j++; } if (!thisCircleIsOk) { return(false); } numOfCircleSecond = listOfCircleSecond.Count; i++; } } return(true); }
public static bool IsRotationTwoComp_Assembly(MyRepeatedComponent firstComponent, MyRepeatedComponent secondComponent, double teta, double[] axisDirection) { const string nameFile = "GetRotationalPatterns.txt"; int i = 0; while (i < 3) { var firstVector = new MyVertex( //firstComponent.Transform.RotationMatrix[i, 0], //firstComponent.Transform.RotationMatrix[i, 1], //firstComponent.Transform.RotationMatrix[i, 2] firstComponent.Transform.RotationMatrix[0, i], firstComponent.Transform.RotationMatrix[1, i], firstComponent.Transform.RotationMatrix[2, i] ); var secondVector = new MyVertex( //secondComponent.Transform.RotationMatrix[i, 0], //secondComponent.Transform.RotationMatrix[i, 1], //secondComponent.Transform.RotationMatrix[i, 2] secondComponent.Transform.RotationMatrix[0, i], secondComponent.Transform.RotationMatrix[1, i], secondComponent.Transform.RotationMatrix[2, i] ); if (secondVector.IsRotationOf(firstVector, teta, axisDirection)) { i++; } else { return(false); } } return(true); }
public static bool CorrespondenceOfEllipsesInCylinderRot(double teta, double[] axisDirection, double[] translationalVector, List <MyEllipse> listOfEllipseFirst, List <MyEllipse> listOfEllipseSecond) { const string nameFile = "GetRotationalPatterns.txt"; var numOfEllipseFirst = listOfEllipseFirst.Count; var numOfEllipseSecond = listOfEllipseSecond.Count; var tolerance = Math.Pow(10, -5); // OBSERVATION: int i, j are such that 0<=i,j<=2 if (numOfEllipseFirst > 0) { int i = 0; // for every ellipse of first cylinder while (i < numOfEllipseFirst) { var firstEllipse = listOfEllipseFirst[i]; var firstCenter = firstEllipse.centerEllipse; var firstCenterTranslated = new MyVertex(firstCenter.x + translationalVector[0], firstCenter.y + translationalVector[1], firstCenter.z + translationalVector[2]); //var whatToWrite = string.Format("Centro della prima ellisse ({0},{1},{2})", firstEllipse.centerEllipse.x, firstEllipse.centerEllipse.y, firstEllipse.centerEllipse.z); //KLdebug.Print(whatToWrite, nameFile); int j = 0; var thisEllipseIsOk = false; while (thisEllipseIsOk == false && j < numOfEllipseSecond) { var secondEllipse = listOfEllipseSecond[j]; //whatToWrite = string.Format("Centro della seconda ellisse ({0},{1},{2})", secondEllipse.centerEllipse.x, secondEllipse.centerEllipse.y, secondEllipse.centerEllipse.z); //KLdebug.Print(whatToWrite, nameFile); //comparison of the ellipse centers: var secondCenter = secondEllipse.centerEllipse; var secondCenterTranslated = new MyVertex(secondCenter.x + translationalVector[0], secondCenter.y + translationalVector[1], secondCenter.z + translationalVector[2]); thisEllipseIsOk = secondCenterTranslated.IsRotationOf(firstCenterTranslated, teta, axisDirection); if (thisEllipseIsOk) { //if the radius correspond: if (Math.Abs(firstEllipse.majorRadEllipse - secondEllipse.majorRadEllipse) < tolerance && Math.Abs(firstEllipse.minorRadEllipse - secondEllipse.minorRadEllipse) < tolerance) { //check if the directions corresponding to the axis are ok: var firstMajorAxisDirectionEllipseMyVertex = new MyVertex(firstEllipse.majorAxisDirectionEllipse[0], firstEllipse.majorAxisDirectionEllipse[1], firstEllipse.majorAxisDirectionEllipse[2]); var firstMinorAxisDirectionEllipseMyVertex = new MyVertex(firstEllipse.minorAxisDirectionEllipse[0], firstEllipse.minorAxisDirectionEllipse[1], firstEllipse.minorAxisDirectionEllipse[2]); var firstMajorAxisDirectionEllipseOppositeMyVertex = new MyVertex(-firstEllipse.majorAxisDirectionEllipse[0], -firstEllipse.majorAxisDirectionEllipse[1], -firstEllipse.majorAxisDirectionEllipse[2]); var firstMinorAxisDirectionEllipseOppositeMyVertex = new MyVertex(-firstEllipse.minorAxisDirectionEllipse[0], -firstEllipse.minorAxisDirectionEllipse[1], -firstEllipse.minorAxisDirectionEllipse[2]); var secondMajorAxisDirectionEllipseMyVertex = new MyVertex(secondEllipse.majorAxisDirectionEllipse[0], secondEllipse.majorAxisDirectionEllipse[1], secondEllipse.majorAxisDirectionEllipse[2]); var secondMinorAxisDirectionEllipseMyVertex = new MyVertex(secondEllipse.minorAxisDirectionEllipse[0], secondEllipse.minorAxisDirectionEllipse[1], secondEllipse.minorAxisDirectionEllipse[2]); if ( secondMajorAxisDirectionEllipseMyVertex.IsRotationOf( firstMajorAxisDirectionEllipseMyVertex, teta, axisDirection) || secondMajorAxisDirectionEllipseMyVertex.IsRotationOf( firstMajorAxisDirectionEllipseOppositeMyVertex, teta, axisDirection)) { if ( secondMinorAxisDirectionEllipseMyVertex.IsRotationOf( firstMinorAxisDirectionEllipseMyVertex, teta, axisDirection) || secondMinorAxisDirectionEllipseMyVertex.IsRotationOf( firstMinorAxisDirectionEllipseOppositeMyVertex, teta, axisDirection)) { listOfEllipseSecond.RemoveAt(j); } else { thisEllipseIsOk = false; } } else { thisEllipseIsOk = false; } } else { thisEllipseIsOk = false; } } j++; } if (!thisEllipseIsOk) { return(false); } else { numOfEllipseSecond = listOfEllipseSecond.Count; i++; } } } return(true); }