From e044b1c7318710304736156973ceea3d4aacfd7c Mon Sep 17 00:00:00 2001 From: MrPlatnum Date: Mon, 15 Sep 2025 15:43:05 +0200 Subject: [PATCH] =?UTF-8?q?Trivia=20erg=C3=A4nzen=20Fragebogen=20leicht=20?= =?UTF-8?q?anpassen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/consent/consent.component.html | 26 +++++++- .../demographics-feedback.component.html | 16 +++++ .../demographics-feedback.component.ts | 59 +++++++++++-------- .../test-suite/test-suite.component.html | 2 +- 4 files changed, 74 insertions(+), 29 deletions(-) diff --git a/src/app/components/consent/consent.component.html b/src/app/components/consent/consent.component.html index e4bbd42..7680798 100644 --- a/src/app/components/consent/consent.component.html +++ b/src/app/components/consent/consent.component.html @@ -43,6 +43,28 @@

+
+ + Hintergrund und Ziele der Studie + + +
+ +
+

Was ist Augmented Reality (AR)?

+

AR erweitert unsere reale Welt um digitale Elemente. Anders als in der Virtual Reality (VR), bei der man man komplett in eine künstliche Welt eintaucht, sehen Sie bei AR Ihre normale Umgebung, die durch virtuelle Objekte und Informationen ergänzt wird.

+
+
+

Was ist das Neuartige an dieser Forschung?

+

Diese Studie konzentriert sich auf die Gestaltung von Augmented Reality (AR), die gezielt an Deckenflächen stattfindet. Dies ist ein relativ neues Anwendungsfeld, das besondere Herausforderungen an die Interaktion und Wahrnehmung stellt. Ich möchte herausfinden, wie man solche Anwendungen am besten gestaltet.

+
+
+

Was ist das Ziel?

+

Mit den Ergebnissen dieser Studie will ich wissenschaftlich fundierte Design-Prinzipien ableiten. Diese sollen zukünftigen Entwicklern helfen, AR-Anwendungen an ungewöhnlichen Orten wie Decken von Anfang an intuitiv, komfortabel und nützlich zu gestalten.

+
+
+
+
@@ -66,7 +88,7 @@ disabled:bg-gray-400 disabled:cursor-not-allowed transition-all duration-200 transform hover:scale-105 disabled:hover:scale-100" > - Umfrage starten + Studie starten diff --git a/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.html b/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.html index 34fa3ab..7fd093f 100644 --- a/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.html +++ b/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.html @@ -86,6 +86,22 @@ +
+ +
+ + +
+
+

diff --git a/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.ts b/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.ts index 99161e9..66d0b93 100644 --- a/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.ts +++ b/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.ts @@ -12,28 +12,30 @@ import { MetricsTrackerService } from '../../../../services/metrics-tracker.serv }) export class DemographicsFeedbackComponent implements OnInit { private metricsService = inject(MetricsTrackerService); + private formBuilder = inject(FormBuilder); @Output() testComplete = new EventEmitter(); @Output() redoTest = new EventEmitter(); - + demographicsForm!: FormGroup; isSubmitting = false; isSubmitted = false; susItems = [ - { label: 'Ich denke, dass ich dieses System gerne regelmäßig nutzen würde.', controlName: 'sus1' }, - { label: 'Ich empfinde das System als unnötig komplex.', controlName: 'sus2' }, - { label: 'Ich empfinde das System als einfach zu nutzen.', controlName: 'sus3' }, - { label: 'Ich denke, dass ich technischen Support brauchen würde, um das System zu nutzen.', controlName: 'sus4' }, - { label: 'Ich finde, dass die verschiedenen Funktionen des Systems gut integriert sind.', controlName: 'sus5' }, - { label: 'Ich finde, dass es im System zu viele Inkonsistenzen gibt.', controlName: 'sus6' }, - { label: 'Ich kann mir vorstellen, dass die meisten Leute das System schnell zu beherrschen lernen.', controlName: 'sus7' }, - { label: 'Ich empfinde die Bedienung als sehr umständlich.', controlName: 'sus8' }, - { label: 'Ich habe mich bei der Nutzung des Systems sehr sicher gefühlt.', controlName: 'sus9' }, - { label: 'Ich musste eine Menge Dinge lernen, bevor ich mit dem System arbeiten konnte.', controlName: 'sus10' } + { label: 'Ich denke, dass ich diese AR-Anwendung gerne regelmäßig nutzen würde.', controlName: 'sus1' }, + { label: 'Ich empfinde diese AR-Anwendung als unnötig komplex.', controlName: 'sus2' }, + { label: 'Ich empfinde diese AR-Anwendung als einfach zu nutzen.', controlName: 'sus3' }, + { label: 'Ich denke, dass ich technischen Support brauchen würde, um diese AR-Anwendung zu nutzen.', controlName: 'sus4' }, + { label: 'Ich finde, dass die verschiedenen Funktionen dieser AR-Anwendung gut integriert sind.', controlName: 'sus5' }, + { label: 'Ich finde, dass es in dieser AR-Anwendung zu viele Inkonsistenzen gibt.', controlName: 'sus6' }, + { label: 'Ich kann mir vorstellen, dass die meisten Leute diese AR-Anwendung schnell zu beherrschen lernen.', controlName: 'sus7' }, + { label: 'Ich empfinde die Bedienung dieser AR-Anwendung als sehr umständlich.', controlName: 'sus8' }, + { label: 'Ich habe mich bei der Nutzung dieser AR-Anwendung sehr sicher gefühlt.', controlName: 'sus9' }, + { label: 'Ich musste eine Menge Dinge lernen, bevor ich mit dieser AR-Anwendung arbeiten konnte.', controlName: 'sus10' } ]; + - constructor(private formBuilder: FormBuilder) { + constructor() { this.logInteraction = this.logInteraction.bind(this); } @@ -47,22 +49,26 @@ export class DemographicsFeedbackComponent implements OnInit { createForm() { this.demographicsForm = this.formBuilder.group({ + // Ergonomics and Physical Feedback comfortHold: [null, Validators.required], enduranceFiveMinutes: [null, Validators.required], physicalStrain: [null, Validators.required], physicalStrain5min: [null, Validators.required], + userPosition: [null, Validators.required], // ++ ADDED THIS LINE ++ + // Demographics age: [null, [Validators.required, Validators.min(13), Validators.max(120)]], gender: [null, Validators.required], - education: [null], - occupation: [null], + // Experience arExperience: [null, Validators.required], vrExperience: [null, Validators.required], + // Visual & Physical visionCorrection: [null], dominantHand: [null], - + + // SUS items sus1: [null, Validators.required], sus2: [null, Validators.required], sus3: [null, Validators.required], @@ -74,14 +80,15 @@ export class DemographicsFeedbackComponent implements OnInit { sus9: [null, Validators.required], sus10: [null, Validators.required], + // Final Comments comments: [''], }); } - + onSubmit() { if (this.demographicsForm.valid) { this.isSubmitting = true; - + const formData = { ...this.demographicsForm.value, susScore: this.calculateSusScore(this.demographicsForm.value), @@ -101,26 +108,26 @@ export class DemographicsFeedbackComponent implements OnInit { }); } else { - Object.keys(this.demographicsForm.controls).forEach(key => { - this.demographicsForm.get(key)?.markAsTouched(); - }); + // Mark all fields as touched to show validation errors + this.demographicsForm.markAllAsTouched(); console.error("Form is invalid. Please fill out all required fields."); } } private calculateSusScore(formData: any): number { let score = 0; + // Odd items (1, 3, 5, 7, 9) score += (formData.sus1 - 1); - score += (5 - formData.sus2); score += (formData.sus3 - 1); - score += (5 - formData.sus4); score += (formData.sus5 - 1); - score += (5 - formData.sus6); score += (formData.sus7 - 1); - score += (5 - formData.sus8); score += (formData.sus9 - 1); + // Even items (2, 4, 6, 8, 10) + score += (5 - formData.sus2); + score += (5 - formData.sus4); + score += (5 - formData.sus6); + score += (5 - formData.sus8); score += (5 - formData.sus10); - return score * 2.5; } -} +} \ No newline at end of file diff --git a/src/app/components/test-suite/test-suite.component.html b/src/app/components/test-suite/test-suite.component.html index 93bab0a..b425df9 100644 --- a/src/app/components/test-suite/test-suite.component.html +++ b/src/app/components/test-suite/test-suite.component.html @@ -61,7 +61,7 @@
-

In diesem Testabschnitt untersuchen wir die ergonomisch optimale Positionierung eines virtuellen Objekts an der Decke.

+

In diesem Testabschnitt wird die ergonomisch optimale Positionierung eines virtuellen Objekts an der Decke untersucht.

  • Das Ziel ist, eine Position zu finden, die es Ihnen erlaubt, das Objekt für 20 Sekunden mit möglichst geringer körperlicher Anstrengung zu betrachten.
  • Positionieren Sie das virtuelle Objekt mithilfe der Steuerung an der Decke.