Чтобы создать запрос в структуре ORM Hibernate, существует три разных типа. Ниже перечислены три способа создания экземпляра запроса:
session.createQuery()
session.createSQLQuery()
session.createCriteria()
Подробно посмотрите детали каждой категории.
Session.createQuery()
Метод createQuery () создает объект Query с использованием синтаксиса HQL. Например:
Query query = session.createQuery("from Student s where s.name like 'k%'");
Session.createSQLQuery()
Метод createSQLQuery () создает объект Query с использованием собственного синтаксиса SQL. Например:
Query query = session.createSQLQuery("Select * from Student");
Session.createCriteria()
Метод createCriteria () создает объект Criteria для установки параметров запроса. Это более полезная функция для тех, кто не хочет писать запрос в руке. Вы можете указать любой тип сложного синтаксиса с использованием API критериев.
Criteria criteria = session.createCriteria(Student.class);
Предполагая, что преобразование представляет собой масштабирование с последующим вращением (возможно, с переводом, но без перекоса) горизонтальный масштабный коэффициент составляет sqrt (a ^ 2 + c ^ 2)
, вертикальный масштабный коэффициент составляет sqrt (b ^ 2 + d ^ 2)
, а отношение горизонтального масштабного коэффициента к вертикальному масштабному коэффициенту должно быть a / d = -c / b
, где a
, b
, c
и d
- четыре из шести членов CGAffineTransform
, согласно документации ( tx
и ty
представляют только перевод, который не влияет на масштабные коэффициенты).
| a b 0 |
| c d 0 |
| tx ty 1 |
Я не знаком с CGAffineTransform или Objective-C (вы поймали меня на математическом теге). В общем, вам нужно откатить преобразования индивидуально. Например, если аффинное преобразование A выполняет только масштабирование, поворот и перемещение (порядок масштабирования и поворота не важен в методе ниже, но перевод обязательно должен быть последним):
Перевод: Применение A к вектор (0,0) вернет результат (tx, ty), где tx и ty - переводы в направлениях X и Y соответственно.
Масштабирование по X: Примените A к вектору (1, 0) и получите (sx0 + tx, sx1 + ty). Масштабирование по X будет sqrt (sx0 ^ 2 + sx1 ^ 2)
Масштабирование по Y: Примените A к вектору (0, 1) и получите (sy0 + tx, sy1 + ty). Масштабирование по Y будет sqrt (sy0 ^ 2 + sy1 ^ 2)
Поскольку аффинные преобразования реализуются с помощью простого трюка с линейными преобразованиями и поскольку линейные преобразования не коммутативны, вам необходимо понять, как преобразования упорядочиваются, прежде чем на самом деле работая над тем, как осуществить индивидуальную трансформацию.