Получите только преобразование масштабирования из CGAffineTransform

Чтобы создать запрос в структуре ORM Hibernate, существует три разных типа. Ниже перечислены три способа создания экземпляра запроса:

  1. session.createQuery()
  2. session.createSQLQuery()
  3. 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);
20
задан Marin Todorov 22 April 2010 в 11:31
поделиться

2 ответа

Предполагая, что преобразование представляет собой масштабирование с последующим вращением (возможно, с переводом, но без перекоса) горизонтальный масштабный коэффициент составляет 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 |
45
ответ дан 29 November 2019 в 22:28
поделиться

Я не знаком с 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)

Поскольку аффинные преобразования реализуются с помощью простого трюка с линейными преобразованиями и поскольку линейные преобразования не коммутативны, вам необходимо понять, как преобразования упорядочиваются, прежде чем на самом деле работая над тем, как осуществить индивидуальную трансформацию.

5
ответ дан 29 November 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: