From ad2fcf8c248c757265c4ba3b4f720c85b083257e Mon Sep 17 00:00:00 2001 From: Jingze Dai <61481741+daijingz@users.noreply.github.com> Date: Sun, 8 Sep 2024 23:00:05 -0400 Subject: [PATCH 1/3] #3252 Contribution on GamePhysics example (Part 2) Re-work some existing sentences by inserting defined concepts inside. --- .../gamephysics/lib/Drasil/GamePhysics/GDefs.hs | 2 +- .../gamephysics/lib/Drasil/GamePhysics/GenDefs.hs | 11 ++++++----- .../gamephysics/lib/Drasil/GamePhysics/IMods.hs | 8 ++++---- .../lib/Drasil/GamePhysics/Requirements.hs | 8 ++++---- .../gamephysics/lib/Drasil/GamePhysics/TMods.hs | 4 ++-- code/stack.yaml | 2 ++ 6 files changed, 19 insertions(+), 16 deletions(-) diff --git a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GDefs.hs b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GDefs.hs index bde4fe5b4f..76312a016b 100644 --- a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GDefs.hs +++ b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GDefs.hs @@ -124,7 +124,7 @@ relativeVelocityInCollisionsGDef = makeRC "relVeloInColl" relativeVelocityInCollisionsDesc :: Sentence relativeVelocityInCollisionsDesc = foldlSent [S "In a collision, the", - phrase velocity, S "of", S "rigid body A", + phrase velocity `S.of_` S "rigid body A", S "colliding with another body B relative to that", S "body, (symbol vAB), is the difference between the", plural velocity, S "of A", S "and B at point P" diff --git a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GenDefs.hs b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GenDefs.hs index 4e9159e8eb..65584af836 100644 --- a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GenDefs.hs +++ b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GenDefs.hs @@ -69,9 +69,9 @@ accelGravityQD :: ModelQDef accelGravityQD = mkQuantDef' QP.gravitationalAccel (nounPhraseSP "Acceleration due to gravity") accelGravityExpr accelGravityDesc :: Sentence -accelGravityDesc = foldlSent [S "If one of the", plural QPP.mass, S "is much larger than the other" `sC` +accelGravityDesc = foldlSent [S "If one of the", plural QPP.mass `S.is` S "much larger than the other" `sC` (S "it is convenient to define a gravitational field around the larger mass as shown above" !.), - S "The negative sign in the equation indicates that the", phrase QP.force, S "is an attractive", + S "The negative sign" `S.inThe` S "equation indicates that the", phrase QP.force, S "is an attractive", phrase QP.force] accelGravityExpr :: PExpr @@ -80,7 +80,7 @@ accelGravityExpr = neg ((sy QP.gravitationalConst $* sy mLarger $/ accelGravitySrc :: Reference accelGravitySrc = makeURI "accelGravitySrc" "https://en.wikipedia.org/wiki/Gravitational_acceleration" $ - shortname' $ S "Definition of Gravitational Acceleration" + shortname' $ S "Definition" `S.of_` S "Gravitational Acceleration" accelGravityDeriv :: Derivation accelGravityDeriv = mkDerivName (phrase QP.gravitationalAccel) @@ -92,7 +92,8 @@ accelGravityDerivSentences = map foldlSentCol [accelGravityDerivSentence1, accelGravityDerivSentence5] accelGravityDerivSentence1 :: [Sentence] -accelGravityDerivSentence1 = [S "From", namedRef newtonLUG (S "Newton's law of universal gravitation") `sC` S "we have"] +accelGravityDerivSentence1 = [S "From", + namedRef newtonLUG (S "Newton's law" `S.of_` S "universal gravitation") `sC` S "we have"] accelGravityDerivSentence2 :: [Sentence] @@ -102,7 +103,7 @@ accelGravityDerivSentence2 = [(S "The above equation governs the gravitational a S "the massive body", (S "exerts on the lighter body" !.), S "Further" `sC` S "suppose that the", phrase cartesian `S.is` S "chosen such that this", phrase QP.force, S "acts on a", phrase line, - (S "which lies along one of the principal axes" !.), + (S "which lies along one" `S.ofThe` S "principal axes" !.), S "Then our", getTandS dVect, S "for the x or y axes is"] accelGravityDerivSentence3 :: [Sentence] diff --git a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/IMods.hs b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/IMods.hs index 0a8519236e..c84be58400 100644 --- a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/IMods.hs +++ b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/IMods.hs @@ -69,8 +69,8 @@ transMotDeriv = mkDerivName (phrase transMot) transMotDerivStmts :: [Sentence] transMotDerivStmts = [ - foldlSent [S "We may calculate the total acceleration of rigid body", - P lJ, S "by calculating the derivative of it's velocity with respect to time", fromSource linAccDD], + foldlSent [S "We may calculate the total acceleration" `S.of_` S "rigid body", + P lJ, S "by calculating the derivative" `S.of_` S "it's velocity with respect to time", fromSource linAccDD], S "Performing the derivative, we obtain:" ] @@ -106,8 +106,8 @@ rotMotDeriv = mkDerivName (phrase rotMot) rotMotDerivStmts :: [Sentence] rotMotDerivStmts = [ - foldlSent [S "We may calculate the total angular acceleration of rigid body", - P lJ, S "by calculating the derivative of its angular velocity with respect to time", fromSource angAccelDD], + foldlSent [S "We may calculate the total angular acceleration" `S.of_` S "rigid body", + P lJ, S "by calculating the derivative" `S.of_` S "its angular velocity with respect to time", fromSource angAccelDD], S "Performing the derivative, we obtain:" ] diff --git a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Requirements.hs b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Requirements.hs index 25cc6daaad..e12e75d569 100644 --- a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Requirements.hs +++ b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Requirements.hs @@ -104,8 +104,8 @@ nonfuncReqs = [performance, correctness, usability, understandability, maintaina performance :: ConceptInstance performance = cic "performance" (foldlSent [ - S "The execution time for collision detection and collision resolution shall be", - S "comparable to an existing 2D physics library on the market (e.g. Pymunk)" + S "The execution time" `S.for` S "collision detection" `S.and_` S "collision resolution shall be", + S "comparable to an existing 2D physics library" `S.onThe` S "market (e.g. Pymunk)" ]) "Performance" nonFuncReqDom correctness :: ConceptInstance @@ -124,14 +124,14 @@ usability = cic "usability" (foldlSent [ S "Software shall be easy to learn" `S.and_` S "use. Usability shall be measured by", S "how long it takes a user to learn how to use the library to create a small program", S "to simulate the movement" `S.of_` S "2 bodies over time in space. Creating a program", - S "should take no less than 30 to 60 minutes for an intermediate to experienced programmer" + S "should take no less than 30 to 60 minutes" `S.for` S "an intermediate to experienced programmer" ]) "Usability" nonFuncReqDom understandability :: ConceptInstance understandability = cic "understandability" (foldlSent [ (S "Users" `S.of_` S "Tamias2D shall be able to learn the software with ease" !.), (S "Users shall be able to easily create a small program using the library" !.), - S "Creating a small program to simulate the movement of 2 bodies" `S.in_` + S "Creating a small program to simulate the movement" `S.of_` S "2 bodies" `S.in_` S "space should take no less that 60 minutes" ]) "Understandability" nonFuncReqDom diff --git a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/TMods.hs b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/TMods.hs index ee113b3e10..e1af9d9545 100644 --- a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/TMods.hs +++ b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/TMods.hs @@ -40,7 +40,7 @@ newtonTLExpr = neg (sy force_2) newtonTLNote :: Sentence newtonTLNote = foldlSent [(S "Every action has an equal and opposite reaction" !.), S "In other words, the", phrase force, ch force_1, S "exerted on the second", - phrase rigidBody, S "by the first is equal in magnitude and in the opposite direction" `S.toThe` + phrase rigidBody, S "by the first is equal in magnitude and" `S.inThe` S "opposite direction" `S.toThe` phrase force, ch force_2, S "exerted on the first", phrase rigidBody, S "by the second"] -- T3 : Newton's law of universal gravitation -- @@ -71,7 +71,7 @@ newtonForceQuant = mkQuant' "force" (nounPhraseSP "Newton's law of universal gra newtonLUGNotes :: [Sentence] newtonLUGNotes = [foldlSent [S "Two", plural rigidBody `S.inThe` S "universe attract each other with a", - getTandS force, S "that is directly proportional to the product of their", + getTandS force, S "that is directly proportional" `S.toThe` S "product of their", plural mass `sC` ch mass_1 `S.and_` ch mass_2 `sC` EmptyS `S.and_` S "inversely proportional" `S.toThe` getTandS sqrDist, S "between them"]] diff --git a/code/stack.yaml b/code/stack.yaml index ca7bd4e718..378c4822c9 100644 --- a/code/stack.yaml +++ b/code/stack.yaml @@ -94,6 +94,8 @@ extra-deps: - unix-2.8.5.1@sha256:3f702a252a313a7bcb56e3908a14e7f9f1b40e41b7bdc8ae8a9605a1a8686f06,9808 - Cabal-3.12.1.0@sha256:08be296ddd941b3f9be4bd125fbb3e6857f5c707b8d10464f6f1d30c91ca3e5f,13551 - Cabal-syntax-3.12.1.0@sha256:6dbb06fb08ff77520947fb4c1ef281c9cea5b8dc7fd9a41ad62273fa916cf4b2,7407 +- time-1.12.2@sha256:88e8493d9130038d3b9968a2530a0900141cd3d938483c83dde56e12b875ebc8,6510 +- Win32-2.14.0.0@sha256:e34af84fec733b5c0c8f052ec39499785e719e2fbbe308983adf26c82ea3704d,5942 # This configuration option allows the use of newer versions of dependencies than what is specified allow-newer: true From 14ffe23fee6930b59a954a35dd37d12ef5f33652 Mon Sep 17 00:00:00 2001 From: Jingze Dai <61481741+daijingz@users.noreply.github.com> Date: Sun, 8 Sep 2024 23:01:25 -0400 Subject: [PATCH 2/3] Update stack.yaml Remove denpendency changes. --- code/stack.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/stack.yaml b/code/stack.yaml index 378c4822c9..ca7bd4e718 100644 --- a/code/stack.yaml +++ b/code/stack.yaml @@ -94,8 +94,6 @@ extra-deps: - unix-2.8.5.1@sha256:3f702a252a313a7bcb56e3908a14e7f9f1b40e41b7bdc8ae8a9605a1a8686f06,9808 - Cabal-3.12.1.0@sha256:08be296ddd941b3f9be4bd125fbb3e6857f5c707b8d10464f6f1d30c91ca3e5f,13551 - Cabal-syntax-3.12.1.0@sha256:6dbb06fb08ff77520947fb4c1ef281c9cea5b8dc7fd9a41ad62273fa916cf4b2,7407 -- time-1.12.2@sha256:88e8493d9130038d3b9968a2530a0900141cd3d938483c83dde56e12b875ebc8,6510 -- Win32-2.14.0.0@sha256:e34af84fec733b5c0c8f052ec39499785e719e2fbbe308983adf26c82ea3704d,5942 # This configuration option allows the use of newer versions of dependencies than what is specified allow-newer: true From 5878ce86566721077296f963658fcd0a30946be5 Mon Sep 17 00:00:00 2001 From: Jingze Dai <61481741+daijingz@users.noreply.github.com> Date: Mon, 9 Sep 2024 12:27:22 -0400 Subject: [PATCH 3/3] #3252 Sentence Reworking (for the GamePhysics Example, Part 3) Re-work some existing sentences by inserting defined concepts inside. --- .../lib/Drasil/GamePhysics/Body.hs | 16 +++++++-------- .../lib/Drasil/GamePhysics/Changes.hs | 4 ++-- .../lib/Drasil/GamePhysics/DataDefs.hs | 12 +++++------ .../lib/Drasil/GamePhysics/GDefs.hs | 20 +++++++++---------- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Body.hs b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Body.hs index 85ce68ec14..75a0fe108f 100644 --- a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Body.hs +++ b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Body.hs @@ -182,12 +182,12 @@ usedDB = cdb ([] :: [QuantityDict]) (map nw symbolsAll ++ map nw acronyms) para1_introduction_intro :: Sentence para1_introduction_intro = foldlSent [S "Due to the rising cost of developing", plural videoGame `sC` - S "developers are looking for ways to save time and money for their" +:+. + S "developers are looking" `S.for` S "ways to save time and money for their" +:+. plural project, S "Using an", phrase openSource, phrase physLib, S "that is reliable and free will cut down development costs and lead", S "to better quality" +:+. plural product_ , - S "The document describes the program" , + S "The document describes the program", S " based on the original, manually created version of" +:+ namedRef externalLinkRef (S "GamePhysics")] @@ -231,7 +231,7 @@ scope = foldlSent_ [phraseNP (the physicalSim) `S.of_` getAcc twoD, sysCtxIntro :: Contents sysCtxIntro = foldlSP [refS sysCtxFig1, S "shows the" +:+. phrase sysCont, - S "A circle represents an entity external to the", phrase software + S "A circle represents an entity external" `S.toThe` phrase software `sC` phraseNP (the user), S "in this case. A rectangle represents the", phrase softwareSys, S "itself", sParen (short gamePhysics) +:+. EmptyS, S "Arrows are used to show the data flow between the", phraseNP (system @@ -244,12 +244,12 @@ sysCtxFig1 = llcc (makeFigRef "sysCtxDiag") $ fig (titleize sysCont) sysCtxDesc :: Contents sysCtxDesc = foldlSPCol [S "The interaction between the", phraseNP (product_ `andThe` user), S "is through an application programming" +:+. - phrase interface, S "The responsibilities of the", phraseNP (user + phrase interface, S "The responsibilities" `S.ofThe` phraseNP (user `andThe` system), S "are as follows"] sysCtxUsrResp :: [Sentence] sysCtxUsrResp = [S "Provide initial" +:+ pluralNP (condition `ofThePS` - physical) +:+ S "state of the" +:+ phrase simulation `sC` + physical) +:+ S "state" `S.ofThe` phrase simulation `sC` plural CP.rigidBody +:+ S "present, and" +:+ plural QP.force +:+. S "applied to them", S "Ensure application programming" +:+ phrase interface +:+ @@ -267,7 +267,7 @@ sysCtxSysResp = [S "Determine if the" +:+ pluralNP (input_ `and_PS` S "within the" +:+ phrase simulation +:+ S "at each" +:+ phrase simulation +:+. S "step", S "Provide updated" +:+ phrase physical +:+ S "state of all" +:+ - plural CP.rigidBody +:+ S "at the end of a" +:+ phrase simulation +:+. + plural CP.rigidBody +:+ S "at the end" `S.ofA` phrase simulation +:+. S "step"] sysCtxResp :: [Sentence] @@ -306,7 +306,7 @@ userCharacteristicsIntro = foldlSP probDescIntro :: Sentence probDescIntro = foldlSent_ [purp, S "in a", foldlList Comma List $ map S ["simple", "lightweight", "fast", "portable"], - S "manner" `sC` S "which will allow for the production of higher quality" +:+. plural product_, + S "manner" `sC` S "which will allow" `S.for` S "the production of higher quality" +:+. plural product_, S "Creating a gaming", phrase physLib, S "is a difficult" +:+. phrase task, titleize' game, S "need", plural physLib, S "that simulate", plural object, S "acting under various", phrase physical, plural condition `sC` S "while simultaneously being fast and efficient enough to work in soft", @@ -420,7 +420,7 @@ offShelfSolsIntro, offShelfSols2DList, offShelfSolsMid, offShelfSols3DList :: Contents offShelfSolsIntro = mkParagraph $ foldlSentCol - [S "As mentioned in the", namedRef (SRS.probDesc [] []) (phrase problemDescription) `sC` + [S "As mentioned" `S.inThe` namedRef (SRS.probDesc [] []) (phrase problemDescription) `sC` S "there already exist free", phrase openSource, phrase game +:+. plural physLib, S "Similar", getAcc twoD, plural physLib, S "are"] diff --git a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Changes.hs b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Changes.hs index f90a32d582..29a5565937 100644 --- a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Changes.hs +++ b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/Changes.hs @@ -51,10 +51,10 @@ likelyChgs = [lcVODES, lcEC, lcID, lcIJC] unlikelyChangesStmt1, unlikelyChangesStmt2, unlikelyChangesStmt3, unlikelyChangesStmt4 :: Sentence -unlikelyChangesStmt1 = (S "The goal of the system is to simulate the interactions of rigid bodies" !.) +unlikelyChangesStmt1 = (S "The goal of the system" `S.is` S "to simulate the interactions of rigid bodies" !.) unlikelyChangesStmt2 = (S "There will always be a source of input data external to the software" !.) unlikelyChangesStmt3 = (S "A Cartesian Coordinate system is used" !.) -unlikelyChangesStmt4 = (S "All objects are rigid bodies" !.) +unlikelyChangesStmt4 = (S "All objects" `S.are` S "rigid bodies" !.) ucSRB, ucEI, ucCCS, ucORB :: ConceptInstance diff --git a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/DataDefs.hs b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/DataDefs.hs index c3d34dc42c..90f7d10707 100644 --- a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/DataDefs.hs +++ b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/DataDefs.hs @@ -275,11 +275,11 @@ coeffRestitutionEqn = neg $ sy finRelVel $. coeffRestitutionDesc :: Sentence coeffRestitutionDesc = foldlSent [S "The", getTandS QP.restitutionCoef, - S "determines the elasticity of a collision between two" +:+. plural rigidBody, + S "determines the elasticity" `S.ofA` S "collision between two" +:+. plural rigidBody, foldlList Comma List [ - eS (sy QP.restitutionCoef $= exactDbl 1) +:+ S "results in an elastic collision", - eS (sy QP.restitutionCoef $< exactDbl 1) +:+ S "results in an inelastic collision", - eS (sy QP.restitutionCoef $= exactDbl 0) +:+ S "results in a totally inelastic collision"]] + eS (sy QP.restitutionCoef $= exactDbl 1) +:+ S "results" `S.in_` S "an elastic collision", + eS (sy QP.restitutionCoef $< exactDbl 1) +:+ S "results" `S.in_` S "an inelastic collision", + eS (sy QP.restitutionCoef $= exactDbl 0) +:+ S "results" `S.in_` S "a totally inelastic collision"]] -----------------------DD15 Kinetic Energy-------------------------------- kEnergyDD :: DataDefinition kEnergyDD = ddENoRefs kEnergy Nothing "kEnergy" @@ -308,7 +308,7 @@ momentOfInertiaEqn = sumAll (variable "j") $ sy massj $* square (sy rRot) momentOfInertiaDesc :: Sentence momentOfInertiaDesc = foldlSent [S "The", getTandS QP.momentOfInertia, S "of a body measures how much", phrase QP.torque, - S "is needed for the body to achieve angular acceleration about the axis of rotation"] + S "is needed" `S.for` S "the body to achieve angular acceleration about the axis of rotation"] ---------------------------DD17 Potential Energy------------------------------------------- @@ -330,7 +330,7 @@ potEnergyDesc = foldlSent [atStartNP (the QP.potEnergy) `S.of_` --- collisionAssump, noDampingAssump, rightHandAssump, rigidBodyAssump, rigidTwoDAssump :: Sentence -collisionAssump = S "All collisions are vertex-to-edge" +:+. fromSource assumpCT +collisionAssump = S "All collisions" `S.are` S "vertex-to-edge" +:+. fromSource assumpCT noDampingAssump = S "No damping occurs during the simulation" +:+. fromSource assumpDI rightHandAssump = S "A" +:+ phrase rightHand `S.is` S "used" +:+. fromSource assumpAD rigidBodyAssump = S "All bodies are assumed to be rigid" +:+. fromSource assumpOT diff --git a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GDefs.hs b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GDefs.hs index 76312a016b..d4536902e9 100644 --- a/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GDefs.hs +++ b/code/drasil-example/gamephysics/lib/Drasil/GamePhysics/GDefs.hs @@ -49,8 +49,8 @@ conservationOfMomentRel = UnaryOp $ Summation Nothing conservationOfMomentDesc :: Sentence conservationOfMomentDesc = foldlSent [S "In an isolated system,", - S "where the sum of external", phrase impulseS, S "acting on the system is zero,", - S "the total momentum of the bodies is constant (conserved)" + S "where the sum of external", phrase impulseS, S "acting" `S.onThe` S "system is zero,", + S "the total momentum" `S.ofThe` S "bodies is constant (conserved)" ] --[mass, initialVelocity, finalVelocity] @@ -60,12 +60,12 @@ conservationOfMomentDeriv = foldlSent [S "When bodies collide, they exert", S "an equal (force) on each other in opposite directions" +:+. S "This is Newton's third law:", S "(expr1)", - S "The objects collide with each other for the exact same amount of", + S "The objects collide with each other" `S.for` S "the exact same amount of", phrase time, getS time, - S "The above equation is equal to the", phrase impulseS, + S "The above equation is equal" `S.toThe` phrase impulseS, S "(GD1 ref)", S "(expr2)", - S "The", phrase impulseS, S "is equal to the change in momentum:", + S "The", phrase impulseS, S "is equal" `S.toThe` S "change in momentum:", S "(expr3)", S "Substituting 2*ref to 2* into 1*ref to 1* yields:", S "(expr4)", @@ -126,7 +126,7 @@ relativeVelocityInCollisionsDesc :: Sentence relativeVelocityInCollisionsDesc = foldlSent [S "In a collision, the", phrase velocity `S.of_` S "rigid body A", S "colliding with another body B relative to that", - S "body, (symbol vAB), is the difference between the", plural velocity, + S "body, (symbol vAB)," `S.is` "the difference between the", plural velocity, S "of A", S "and B at point P" ] @@ -145,9 +145,9 @@ coefficientOfRestitutionDesc :: Sentence coefficientOfRestitutionDesc = foldlSent [S "The", phrase restitutionCoef, getS restitutionCoef, S "is", S "a unitless, dimensionless quantity that determines the elasticity of a", - S "collision between two bodies. (symbol/expr)[CR = 1] results in an elastic", - S "collision, while (symbol/expr)[CR < 1] results in an inelastic collision,", - S "and (symbol/expr)[CR = 0] results in a totally inelastic collision" + S "collision between two bodies. (symbol/expr)[CR = 1] results" `S.in_` S "an elastic", + S "collision, while (symbol/expr)[CR < 1] results" `S.in_` S "an inelastic collision,", + S "and (symbol/expr)[CR = 0] results" `S.in_` S "a totally inelastic collision" ] --[restitutionCoef, normCollisionVect, initRelativeVelocityAB, finalRelativeVelocityAB] @@ -164,7 +164,7 @@ torqueGDef = makeRC "torque" torqueDesc :: Sentence torqueDesc = foldlSent [S "The", phrase torque, getS torque, - S "on a body measures the", S "the tendency of a", phrase force, + S "on a body measures the", S "the tendency" `S.ofA` phrase force, S "to rotate the body around an axis or pivot" ]