У вас не будет доступа к объекту TestFile
, поскольку схема создается во время выполнения, а не предварительно компилируется. Если вы хотите сохранить этот POJO, вам понадобится конструктор для public TestFile(GenericRecord avroRecord)
. Вам нужно будет создать GenericRecord
, используя этот объект Schema
, так же, как если бы вы анализировали его из Строка или файл.
Например,
Schema schema = SchemaBuilder.record("TestFile")
.namespace("com.example.kafka.data.ingestion.model")
.fields()
.requiredLong("date")
.requiredInt("counter")
.requiredString("mc")
.endRecord();
GenericRecord entry1 = new GenericData.Record(schema);
entry1.put("date", 1L);
entry1.put("counter", 2);
entry1.put("mc", "3");
// producer.send(new ProducerRecord<>(topic, entry1);
Полный пример Кафки доступен из Confluent
Если вы не указали обязательное поле, оно Я выдам ошибку, и значения типов не проверяются (я мог бы поставить "counter", "2"
, и он отправил бы строковое значение (мне кажется, это ошибка). По сути, GenericRecord == HashMap
с дополнительным преимуществом требуемых / обнуляемых полей.
И вам нужно будет настроить сериализатор Avro, такой как Confluent, для которого требуется запуск реестра реестра, или версию, подобную Cloudera показывает
[1117 В противном случае вам необходимо преобразовать объект Avro в byte[]
(как показано в вашей ссылке и просто использовать ByteArraySerializer
Допущения: x
- горизонтальная ось, увеличивается при движении слева направо.
y
- вертикальная ось, увеличивается снизу вверх. (touch_x, touch_y)
- точка
, выбранная пользователем. (center_x, center_y)
- точка в центре экрана
. тета
отсчитывается против часовой стрелки от оси + x
. Затем:
delta_x = touch_x - center_x
delta_y = touch_y - center_y
theta_radians = atan2(delta_y, delta_x)
Edit : вы упомянули в комментарии, что y увеличивается сверху вниз. В этом случае ,
delta_y = center_y - touch_y
Но было бы правильнее описать это как выражение (touch_x, touch_y)
в полярных координатах относительно (center_x, center_y)
. Как упоминал ChrisF,
идея использования «угла между двумя точками» не совсем ясна.
в андроиде я сделал это использование kotlin:
private fun angleBetweenPoints(a: PointF, b: PointF): Double {
val deltaY = abs(b.y - a.y)
val deltaX = abs(b.x - a.x)
return Math.toDegrees(atan2(deltaY.toDouble(), deltaX.toDouble()))
}