Angesichts einer Reihe von willkürlichen Vektoren (in einer Matrix A gespeichert) und einem Radius r, würde ich gerne alle ganzzahlige lineare Kombinationen der Vektoren finden, die in a landen Kugel mit Radius r. Die notwendigen Koordinaten Ich würde dann speichern Sie in einer Matrix V. So zum Beispiel, wenn die lineare KombinationDer beste Weg, um alle Punkte des Gitters in der Kugel zu finden
K=[0; 1; 0]
landet in meinem Bereich, also so etwas wie
if norm(A*K) <= r then
V(:,1)=K
end
usw.
Die Vektoren in A sind sicher die einfachste mögliche Basis für das gegebene Gitter und der größte Vektor wird die Länge 1 haben. Nicht sicher, ob das die Vektoren in irgendeiner nützlichen Weise einschränkt, aber ich vermute, dass dies der Fall sein könnte. - Sie werden nicht so ähnliche Richtungen haben, wie eine weniger ideale Basis hätte.
Ich habe schon ein paar Ansätze versucht, aber keiner von ihnen scheint besonders befriedigend. Ich finde kein schönes Muster, um das Gitter zu durchqueren.
Mein aktueller Ansatz besteht darin, in der Mitte zu beginnen (d. H. Mit der Linearkombination aller 0) und die notwendigen Koordinaten nacheinander durchzugehen. Es beinhaltet das Speichern einer Menge zusätzlicher Vektoren, um zu verfolgen, so dass ich alle Oktanten (im Fall 3D) der Koordinaten durchgehen und sie einzeln finden kann. Diese Implementierung scheint furchtbar komplex und nicht sehr flexibel zu sein (insbesondere scheint sie nicht leicht auf beliebig viele Dimensionen zu verallgemeinern - obwohl das für den aktuellen Zweck nicht unbedingt notwendig ist, wäre es ein nice-to-have)
Gibt es eine nette * Möglichkeit, alle erforderlichen Punkte zu finden?
(* Idealerweise sowohl effizient als auch elegant **. Wenn es wirklich nötig wäre, wäre es nicht wichtig, ein paar Extrapunkte außerhalb der Sphäre zu haben, aber vorzugsweise nicht viel mehr. Ich brauche definitiv alle Vektoren innerhalb der Kugel - wenn es einen großen Unterschied macht, ich bin am meisten interessiert in dem 3D-Fall
** ich bin mir ziemlich sicher, dass meine aktuelle Implementierung ist weder)
ähnliche Fragen, die ich gefunden...:
Find all points in sphere of radius r around arbitrary coordinate - das ist eigentlich ein viel allgemeinerer Fall als das, wonach ich suche. Ich habe es nur mit periodischen Gittern zu tun, und meine Sphäre ist immer bei 0 zentriert und fällt mit einem Punkt auf dem Gitter zusammen. Aber ich habe keine Liste von Punkten, sondern eine Matrix von Vektoren, mit denen ich alle Punkte generieren kann.
How to efficiently enumerate all points of sphere in n-dimensional grid - der Fall für ein völlig normales hyperkubisches Gitter und die Manhattan-Distanz. Ich suche nach völlig willkürlichen Gittern und euklidischen Entfernungen (oder, aus Gründen der Effizienz, natürlich das Quadrat davon).
Ich frage nicht, wie man testet, ob eine bestimmte lineare Kombination innerhalb einer Kugel ist. Ich frage, wie man effizient alle Linearkombinationen findet und auflistet, die innerhalb dieser Sphäre liegen. – kram1032
Ja. Es gibt unendlich viele von ihnen. Also ist Ihre beste Wette lösen für (x1, x2 ..), die eine geometrische Struktur sein wird, und Probe daraus. – ElKamina
Ich fürchte, ich folge nicht. Kannst du es ausarbeiten? Ich bin mir bewusst, dass es unendlich viele Punkte in meinem räumlich unendlichen Gitter gibt. – kram1032