Ich habe zwei Sätze ( sourc
und target
) von Punkten (x,y)
, die ich ausrichten möchte. Was ich bisher gemacht habe ist:
- Finden Sie den Schwerpunkt jedes Punktesatzes
- Verwenden Sie den Unterschied zwischen den Zentroiden-Übersetzungen, den Punkt in
x
undy
Ich möchte die beste Drehung (in Grad) finden, um die Punkte auszurichten .
Irgendeine Idee?
Der M-Code befindet sich unten (mit Darstellungen zur Visualisierung der Änderungen):
# Raw data
## Source data
sourc = matrix(
c(712,960,968,1200,360,644,84,360), # the data elements
nrow=2, byrow = TRUE)
## Target data
target = matrix(
c(744,996,980,1220,364,644,68,336), # the data elements
nrow=2, byrow = TRUE)
# Get the centroids
sCentroid <- c(mean(sourc[1,]), mean(sourc[2,])) # Source centroid
tCentroid <- c(mean(target[1,]), mean(target[2,])) # Target centroid
# Visualize the points
par(mfrow=c(2,2))
plot(sourc[1,], sourc[2,], col="green", pch=20, main="Raw Data",
lwd=5, xlim=range(sourceX, targetX),
ylim=range(sourceY, targetY))
points(target[1,], target[2,], col="red", pch=20, lwd=5)
points(sCentroid[1], sCentroid[2], col="green", pch=4, lwd=2)
points(tCentroid[1], tCentroid[2], col="red", pch=4, lwd=2)
# Find the translation
translation <- tCentroid - sCentroid
target[1,] <- target[1,] - translation[1]
target[2,] <- target[2,] - translation[2]
# Get the translated centroids
tCentroid <- c(mean(target[1,]), mean(target[2,])) # Target centroid
# Visualize the translation
plot(sourc[1,], sourc[2,], col="green", pch=20, main="After Translation",
lwd=5, xlim=range(sourceX, targetX),
ylim=range(sourceY, targetY))
points(target[1,], target[2,], col="red", pch=20, lwd=5)
points(sCentroid[1], sCentroid[2], col="green", pch=4, lwd=2)
points(tCentroid[1], tCentroid[2], col="red", pch=4, lwd=2)
source
und Großbuchstaben für Vektor stehen target
) Ich habe diese Möglichkeit nicht erwähnt und ausdrücklich erlaubt oder nicht erlaubt gesehen. Bist du sicher, dass du das nicht besser passen willst?