示例#1
0
int main (int argc, char *argv[])
{
	char *configFile = NULL;

	// Declare objects
	struct system System;
	struct tip Tip;
	struct space Space;
	struct graphene Graphene;
	struct substrate Substrate;

	initSystem(&System, &Tip, &Space, &Graphene, &Substrate);
	parseOptions(argc, argv, &configFile, &System, &Tip);
	parseFile(configFile, &System, &Tip, &Space, &Graphene, &Substrate);

	createSystem(&System, &Tip);
	createGraphene(&System, &Graphene);
	createSpace(&System, &Space);
//	createTip(&System, &Tip);
	createSubstrate(&System, &Substrate);
	
	// Cartesian
	transformCylindric(&System);
	assignPointers(&System, &Tip, &Space, &Graphene, &Substrate);
	assignPotential(&System, &Tip, &Space, &Graphene, &Substrate);
	retransformCylindric(&System);

	laplaceCartesian(&System);

	transformCylindric(&System);
	retransformCylindric(&System);
	saveData(&System);


	// Visualize System if necessary
	if (System.visual)
	{
		initVisual();
		drawObjects(&System, &Tip, &Space, &Graphene, &Substrate);
	}

	free(System.points); // Free all points

	return EXIT_SUCCESS;
}
bool parallelPlanning(bool output, enum SPACE_TYPE space, std::vector<enum PLANNER_TYPE> &planners, unsigned int links,
                      unsigned int chains, struct ConstrainedOptions &c_opt, struct AtlasOptions &a_opt, bool bench)
{
    // Create a shared pointer to our constraint.
    auto constraint = std::make_shared<ParallelConstraint>(links, chains);

    ConstrainedProblem cp(space, constraint->createSpace(), constraint);
    cp.setConstrainedOptions(c_opt);
    cp.setAtlasOptions(a_opt);

    cp.css->registerProjection("parallel", constraint->getProjection(cp.css));

    Eigen::VectorXd start, goal;
    constraint->getStart(start);
    constraint->getGoal(goal);

    cp.setStartAndGoalStates(start, goal);
    cp.ss->setStateValidityChecker(std::bind(&ParallelConstraint::isValid, constraint, std::placeholders::_1));

    if (!bench)
        return parallelPlanningOnce(cp, planners[0], output);
    else
        return parallelPlanningBench(cp, planners);
}
示例#3
0
    /**
     * Verarbeitet das Touch-Event.
     */
    void handleTouchEvent() {
        // Prüfung, ob ein Tipp auf den Touchscreen erkannt und dieser noch nicht verarbeitet wurde
        if (touchEvent.isTap && touchEvent.startTime > lastTapTime) {
            // Es wurde auf den Touchscreen getippt. Es wird versucht, an der Stelle ein Feld zu
            // erzeugen.

            QCAR::Vec3F intersection;
            // Projektion der Koordinaten, auf die getippt wurde, auf die Ebene des getrackten
            // Objektes
            projectScreenPointToPlane(screenWidth, screenHeight,
                    QCAR::Vec2F(touchEvent.tapPosition.data[0], touchEvent.tapPosition.data[1]),
                    inverseProjectionMatrix, modelViewMatrix, QCAR::Vec3F(0, 0, 0),
                    QCAR::Vec3F(0, 0, 1), intersection);
            // Prüfung, ob sich an den projezierten Koordinaten bereits ein Feld befindet
            Space* space = selectSpace(QCAR::Vec2F(intersection.data[0], intersection.data[1]));
            if (space != NULL) {
                // Feld gefunden

                // normales Feld in Sonderfeld umwandeln und umgekehrt
                if (space->type == SPACE) {
                    space->type = SPECIAL_SPACE;
                } else if (space->type == SPECIAL_SPACE) {
                    space->type = SPACE;
                }
            } else if (canCreateSpace(QCAR::Vec2F(intersection.data[0], intersection.data[1]))) {
                // kein Feld gefunden, es kann ein neues erstellt werden

                // Feld erzeugen
                createSpace(QCAR::Vec2F(intersection.data[0], intersection.data[1]));
                // Weiter-Button beim Erreichen einer bestimmten Anzahl von Feldern anzeigen
                if (field.length == SPACE_COUNT_TO_SHOW_NEXT_BUTTON) {
                    showView("nextButton");
                }
                // Neustart-Button beim Erreichen einer bestimmten Anzahl von Feldern anzeigen
                if (field.length == SPACE_COUNT_TO_SHOW_RESTART_BUTTON) {
                    showView("restartButton");
                }
            }
            // Zeit des Verarbeitung manipulieren, damit dieser Tipp nicht mehr verarbeitet wird
            lastTapTime = touchEvent.startTime;
        } else if (touchEvent.isActive) {
            // Der User hat den Finger immer noch auf dem Touchscreen. Wenn der Finger über den
            // Bildschrim gezogen wird, dann wird versucht auf diesem Zieh-Pfad nacheinander Felder
            // zu erzeugen.

            // Touch-Ereignis ignorieren, wenn daraus noch ein Tipp werden könnte
            if (touchEvent.lifeTime > MAX_TAP_TIME
                    || touchEvent.startPositionLastPositionDistance > MAX_TAP_SQUARED_DISTANCE) {
                QCAR::Vec3F intersection;
                // Projektion der Koordinaten, auf denen sich der Finger befindet, auf die Ebene des
                // getrackten Objektes
                projectScreenPointToPlane(
                        screenWidth,
                        screenHeight,
                        QCAR::Vec2F(touchEvent.currentPosition.data[0],
                                touchEvent.currentPosition.data[1]), inverseProjectionMatrix,
                        modelViewMatrix, QCAR::Vec3F(0, 0, 0), QCAR::Vec3F(0, 0, 1), intersection);
                // Prüfung, ob an den projezierten Koordinaten ein Feld erzeugt werden kann
                if (canCreateSpace(QCAR::Vec2F(intersection.data[0], intersection.data[1]))) {
                    // Feld erzeugen
                    createSpace(QCAR::Vec2F(intersection.data[0], intersection.data[1]));
                    // Weiter-Button beim Erreichen einer bestimmten Anzahl von Feldern anzeigen
                    if (field.length == SPACE_COUNT_TO_SHOW_NEXT_BUTTON) {
                        showView("nextButton");
                    }
                    // Neustart-Button beim Erreichen einer bestimmten Anzahl von Feldern anzeigen
                    if (field.length == SPACE_COUNT_TO_SHOW_RESTART_BUTTON) {
                        showView("restartButton");
                    }
                }
            }
        }
    }