Seite 1 von 3

Schnelllesen via Spritz Technologie-welche Technik?

Verfasst: 02.03.2014 12:55
von N_Gnom
http://www.spritzinc.com/

Mich würde interessieren wie das funktioniert.
Also nach welchem System der rote Buchstabe ermittelt wird.

Wäre doch toll wenn man sowas für privat nachbauen könnte und dann einfach Textdateien in so einem schnellen Tempo lesen könnte.

Re: Schnelllesen via Spritz Technologie-welche Technik?

Verfasst: 02.03.2014 13:50
von - chris -
http://winfuture.de/news,80590.html

So wie ich das hier gelesen habe, geht es nur darum das der Fixpunkt
immer an der selben Stelle der Box platziert ist.

Re: Schnelllesen via Spritz Technologie-welche Technik?

Verfasst: 02.03.2014 14:06
von N_Gnom
Das ist schon richtig, ich meinte aber bei unterschiedlicher Buchstabenanzahl wo dann er fixpunkt ist.
Müsste sich aber aus dem Beispieltext ableiten lassen.

Des weiteren werden nur 13 Buchstaben maximal dargestellt und bei größeren Wörtern automatisch getrennt.

Das wird wohl das größte problem sein, da man ja dann noch eine silbentrennung einbauen müsste.

Verfasst: 02.03.2014 16:20
von CodeCommander
Hallo N_Gnom,
du ermittelst einfach die Anzahl und nimmst die Mitte. Der Buchstabe in der Mitte zentrierst du und schon kannst du in dieser Art schnell lesen.
Bei der Silbentrennung gibt es Regeln die du nutzen kannst. Wenn ein Wort länger als 13 Zeichen ist dann schaust du ob am Ende Postfixe vorhanden sind.
Beispiele: -lich, -heit, -keit, -tät, schaft, -iker, -...
Oder im Duden gibt es Regeln über Silbentrennung.

Re: Schnelllesen via Spritz Technologie-welche Technik?

Verfasst: 02.03.2014 17:48
von - chris -

Code: Alles auswählen


	var findBestLetter = function(word) {
		var bestLetter = 1;
		var wordLength = word.length;
		jsutil.debug(5, name + "findBestLetter " + word + ", " + wordLength);

		switch (wordLength) {
		case 1:
			bestLetter = 0; // first
			break;
		case 2:
		case 3:
		case 4:
		case 5:
			bestLetter = 1; // second
			break;
		case 6:
		case 7:
		case 8:
		case 9:
			bestLetter = 2; // third
			break;
		case 10:
		case 11:
		case 12:
		case 13:
			bestLetter = 3; // fourth
			break;
		default:
			bestLetter = 4; // fifth
		};

		// maybe: make correction in case of space
		if (word.charAt(bestLetter) == ' ') {
			bestLetter--;
		}

		return bestLetter;
	};


Re: Schnelllesen via Spritz Technologie-welche Technik?

Verfasst: 02.03.2014 17:55
von NicTheQuick
Ist in PB sogar kürzer :D

Code: Alles auswählen

Procedure.i findBestLetter(word.s)
	Protected bestLetter.i = 1
	Protected wordLength.i = Len(word)
	Debug "findBestLetter" + word + ", " + wordLength, 5
	
	Select wordLength
		Case 1: bestLetter = 0
		Case 2 To 5: bestLetter = 1
		Case 6 To 9: bestLetter = 2
		Case 10 To 13: bestLetter = 3
		Default: bestLetter = 4
	EndSelect
	
	If (Mid(word, bestLetter + 1, 1) = " ")
		bestLetter - 1
	EndIf
	
	ProcedureReturn bestLetter
EndProcedure

Re: Schnelllesen via Spritz Technologie-welche Technik?

Verfasst: 02.03.2014 19:04
von N_Gnom
Achso....nadann....
Wäre also nur noch das Problem der Silbentrennung bei Wörter mit mehr als 13 Buchstaben.

Verfasst: 02.03.2014 19:42
von CodeCommander
N_Gnom hat geschrieben:Wäre also nur noch das Problem der Silbentrennung bei Wörter mit mehr als 13 Buchstaben.
Für das Problem gibt es schon Lösungen. Einfach im Duden schauen. ;)

Re: Schnelllesen via Spritz Technologie-welche Technik?

Verfasst: 02.03.2014 21:27
von - chris -

Code: Alles auswählen


EnableExplicit

;ImageDecoder
UsePNGImageDecoder()

;- Enumerations / DataSections
;- Windows
Enumeration
  #Window_0
EndEnumeration

;- Gadgets
Enumeration
  #Image_spritz
EndEnumeration

;- Images
Enumeration
  #Image_BG
EndEnumeration

;- Fonts
Enumeration
  #Arial24
EndEnumeration

;- Global
Global quit.i, q1, spritzTH.i

;- Define
Define Event.i, EventWindow.i, EventGadget.i, EventType.i, EventMenu.i
Define a$

If CreateImage(#Image_BG, 359, 112, 24) = 0
  End
EndIf

LoadFont(#Arial24, "Arial", 24, #PB_Font_HighQuality)

Procedure OpenWindow_Window_0()
  Protected res.i
  res = #False
  If OpenWindow(#Window_0, #PB_Ignore, #PB_Ignore, 359, 112, "Spritz", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
    ImageGadget(#Image_spritz, 0, 0, 359, 112, 0)
    res = #True
  EndIf
  ProcedureReturn res
EndProcedure

Procedure findBestLetter(word.s)

  Protected wordLength.i, bestLetter.i

  If word <> ""

    wordLength = Len(word)

    Select wordLength

      Case 1
        bestLetter = 0 ;first

      Case 2, 3, 4, 5
        bestLetter = 1 ;second

      Case 6, 7, 8, 9
        bestLetter = 2 ;third

      Case 10, 11, 12, 13
        bestLetter = 3 ;fourth

      Default
        bestLetter = 4 ;fifth

    EndSelect

    If (Mid(word, bestLetter + 1, 1) = " ")
      bestLetter - 1
    EndIf

  EndIf

  ProcedureReturn bestLetter
EndProcedure

Procedure spritz(temp.i)

  Protected word.s, bestLetter.i, leftWidth.i, n.i, redWidth.i, wordWidth.i, wordX.i, offs.i

  NewList words.s()

  If ReadFile(0, "spritz.txt")

    While Eof(0) = 0

      word = ReadString(0)

      AddElement(words())
      words() = word

    Wend

    CloseFile(0)

  EndIf

  ResetList(words())

  Repeat

    If NextElement(words())
      word = words()
    Else
      ResetList(words())
    EndIf

    bestLetter = findBestLetter(word)

    If StartDrawing(ImageOutput(#Image_BG))

      Box(0, 0, 359, 112, RGB(219, 220, 221))

      RoundBox(11, 11, 337, 69, 3, 3, RGB(255, 255, 255))
      Box(21, 18, 317, 2, RGB(0, 0, 0))
      Box(21, 71, 317, 2, RGB(0, 0, 0))

      Box(128, 18, 2, 8, RGB(0, 0, 0))
      Box(128, 65, 2, 8, RGB(0, 0, 0))

      If word <> ""

        DrawingFont(FontID(#Arial24))
        DrawingMode(#PB_2DDrawing_Transparent)

        wordWidth = TextWidth(word)

        leftWidth = 0
        For n = 1 To bestLetter + 1
          leftWidth = leftWidth + TextWidth(Mid(word, n, 1))
        Next

        redWidth = TextWidth(Mid(word, bestletter + 1, 1))

        wordX = 128 - (leftWidth - (redWidth / 2))

        offs = 0
        For n = 1 To Len(word)
          If n = bestLetter + 1
            DrawText(wordX + offs, 30, Mid(word, n, 1), RGB(255, 0, 0))
          Else
            DrawText(wordX + offs, 30, Mid(word, n, 1), RGB(0, 0, 0))
          EndIf
          offs = offs + TextWidth(Mid(word, n, 1))
        Next n

      EndIf

      StopDrawing()

      SetGadgetState(#Image_spritz, ImageID(#Image_BG))

    EndIf

    Delay(250)

  Until quit = 1

EndProcedure

If OpenWindow_Window_0()

  spritzTH = CreateThread(@spritz(), 0)

  ;- Event loop
  Repeat

    Event       = WaitWindowEvent(100)
    EventGadget = EventGadget()
    EventType   = EventType()
    EventWindow = EventWindow()

    Select Event

      Case #PB_Event_Gadget

        If EventGadget = #Image_spritz

        EndIf

      Case #PB_Event_CloseWindow

        quit = 1

    EndSelect

    q1 = IsThread(spritzTH)

  Until quit = 1 And q1 = 0

EndIf

End


Re: Schnelllesen via Spritz Technologie-welche Technik?

Verfasst: 02.03.2014 22:10
von Derren
- chris - hat geschrieben:
Guter Anfang.

Fehlt noch Silbentrennung. Umlaute und ß werden irgendwie nur als Kästchen dargestellt und der Text wird nur am einem Zeilenumbruch getrennt und nicht bei Leerzeichen.

Mit einer Pause-, next/previous Satz/Paragraph/Kapitel-Funktion und Positionsslider wär das ein super Tool :)