Используя GNU sed
, (и bash
):
F="my name is user from here not there."
sed -E 's/^./\u&/;s/([[:space:]])([[:alpha:]]{4})/\1\u\2/g' \
<<< "${F,,}"
или:
sed -E 's/^./\u&/;s/(\s)(\w{4})/\1\u\2/g' <<< "${F,,}"
Выход:
My Name is User From Here not There.
Примечания:
"${F,,}"
является расширением параметра модификации регистра bash
, оно возвращает версию $F
в нижнем регистре, которая становится входом для sed
.
GNU sed
предлагает некоторые полезные синонимы и сокращения для общих регулярных выражений классов символов. Класс символов [a-zA-Z0-9_]
может быть сокращен до [[:alpha:]_]
, или еще проще \w
.
Хотя \u
выглядит как сокращение в регулярном выражении , это не так. Это «специальная последовательность» , используемая только в s
текст замены команды ubstitute - \u
означает «перевод следующего символа в верхний регистр» . [ 1139]
&
относится к любому первому регулярному выражению в команде s
ubstitute . Сравните следующее:
sed 's/./&/' <<< foo # outputs "f"
sed 's/./&/g' <<< foo # outputs "foo"
sed 's/./&&&&/g' <<< foo # outputs "ffffoooooooo"
sed 's/./\u&&&\u&/g' <<< foo # outputs "FffFOooOOooO"
sed 's/.*/&&&&/' <<< foo # outputs "foofoofoofoo"
См. GNU sed
информационные страницы для получения более подробной информации.
Я думаю более легкий способ сделать, это должно использовать скорость ракеты вместо того, чтобы вычислить углы. Скажите, что у Вас есть ракета, которая имеет xVelocity
и yVelocity
для представления ее перемещения горизонтально и вертикально. Те скорости могут быть положительными или отрицательными для представления оставленный, право, или вниз.
yVelocity
. xVelocity
. Это сохранит перемещение в противоположной оси тем же.
Заимствование изображения от [1 113] ответ ChrisF , скажем, ракета начинается в положении I.
С xVelocity
и yVelocity
и быть положительным (в 2D графическом праве, и вниз обычно положительны), ракета переместится в обозначенном направлении. Позвольте нам просто присвоить значения [1 121]
xVelocity = 3
yVelocity = 4
, Когда ракета врезается в стену в положении C , xVelocity
не должен изменяться, но yVelocity
должен быть инвертирован к-4 так, чтобы это переместилось, въезжают задним ходом направление, но продолжает идти направо.
преимущество для этого метода - то, что только необходимо отслеживать ракету xPosition
, yPosition
, xVelocity
, и yVelocity
. Используя просто эти четыре компонента и частоту обновления Вашей игры, ракета будет всегда перерисовываться в правильном положении. После того как Вы входите в более сложные препятствия, которые не являются под прямыми углами или перемещаются, будет намного легче работать со скоростями X и Y, чем с углами.
Вы могли бы думать, что, потому что Ваши стены выровненные осей координат, что имеет смысл писать код особого случая (для вертикальной стены, инвертируйте x-координату скорости; для горизонтальной стены инвертируйте y-координату скорости). Однако, после того как у Вас есть игра, работающая хорошо с вертикальными и горизонтальными стенами, вероятно, следующая вещь, Вы будете думать, "что относительно стен под произвольными углами?" Таким образом, это стоит думать об общем случае с начала.
В общем случае, предположите, что Ваша ракета имеет скорость v и врезается в стену с поверхностью, нормальной n.
Разделение v в компоненты перпендикуляр u к стене и w параллельны к нему.
, Где:
u = ( В В v · В n / В В n · В n) n
w = v в€’ u
Здесь, В В v · В n скалярное произведение из векторов v и n. См. ссылку для объяснения того, как вычислить ее. Скалярное произведение В В n · В n оценивает к квадрату длины вектора нормали; если Вы всегда сохраняете свой normals в форме единичные векторы затем В В n · В n = 1 и можно опустить подразделение.
После возврата, компонент движения, параллельного стене, затронут трением f, и перпендикуляр компонента к стене затронут эластичностью, которая может быть дана в форме коэффициент восстановления r .
Так скорость после того, как коллизия v′ = f w в€’ r u. В пњ «совершенно эластичная, лишенная трения коллизия, v′ = w в€’ u; то есть, движение отражается о нормальном при коллизии, как в схеме, данной в ответе счета.
Этот подход работает все равно в трех измерениях также.
(Очевидно, это - очень упрощенное понятие возврата; это не уделяет внимания угловому моменту или деформации. Но для многих видов видеоигр отлично соответствует этот вид упрощения.)
Для идеальных частиц (& свет), угол отражения равен углу падения, как проиллюстрировано этой схемой (с commons.wikimedia.org).
Делают поиск "угла отражения" (без кавычек) в Google.
Это сложно при принятии во внимание эластичности и материалов объекта и препятствий ;)
Как в стороне к определенному вопросу о физике Вы спрашиваете, я рекомендовал бы книгу "Начинающаяся Математика и Физика для Игровых Программистов" Wendy Stahler. Я нашел это довольно полезным для моих проектов программирования игры/физики.
кодом, который сопровождает книгу, является C++, но если бы Вы знаете C#, было бы довольно легко сделать преобразование.
Имеют хороший!
Не сложный вообще - псевдокод:
angleObjectHitWall = a;
bounceAngle = 180-a;
, Конечно, это - очень простое вычисление и полностью не важно, после того как Вы начинаете принимать во внимание факторы, такие как материал, сила тяжести, стены, которые не являются прямыми, и т.д.
180-a не будет работать во всех экземплярах, если Вы просто не работаете возврат над главной поверхностью, когда X увеличивается.
Одно направление для заголовка является форумами XNA или погрузкой пример кода XNA. Это - C#, и это для создания игр. Я не заявляю, что Вы хотите создать свои игры в XNA, но это - большой инструмент, и это свободно.
Это - действительно вопрос о физике, поэтому если Вы не физик (и так как Вы задаете этот вопрос, я собираюсь взять его, что Вы не), он потребует, чтобы большое чтение и мозговая атака разобралось в нем.
я предлагаю читать этот статья в Википедии для получения общего представления о глубине вопроса.
, Если бы Вы только хотите заставить его "выглядеть вероятным" затем, что я не волновался бы об этом слишком много и использование , тарифицируют Ящерицу ответ, однако если Вы захотите сделать это правом, то у Вас будет настоящее приключение. Не позволяйте этой панике Вы tho!Удачи!