Lassen Sie sagen, ich 5 Punkte haben, wo p0 und p4 mit Werten fixiert sind 0.0 und 4.0: BewegenWie dehnt man Punkte?
0 | 1.0 | 2.0 | 3.0 | 4
Die Punkte in der Mitte ändern können, aber sie müssen die anderen einmal strecken.
Also für eine stretch
„nach rechts“, muss er die i.Vj. Werte um den sich bewegenden Punkt und press
die nächsten sind zwischen dem sich bewegenden Punkt und dem letzten Punkt, halten die Proportionen zwischen den einzelnen Punkten enlarge
.
Ich habe diese code schreiben, die die 3 ° Punkt 2.5
von seiner ursprünglichen 2.0
x-Position:
const int numPoints = 5;
double points[numPoints] = { 0.0, 1.0, 2.0, 3.0, 4.0 };
int stretchedPoint = 2;
double prevX = points[stretchedPoint];
points[stretchedPoint] = 2.5;
std::cout<< points[0];
for (int prevPoint = 1; prevPoint < numPoints - 1; prevPoint++) {
// prev points
if (prevPoint < stretchedPoint) {
double ratio = points[stretchedPoint]/prevX;
points[prevPoint] *= ratio;
// next points
} else if (prevPoint > stretchedPoint) {
double ratio = (points[numPoints - 1] - prevX)/(points[numPoints - 1] - points[stretchedPoint]);
points[prevPoint] *= ratio;
}
std::cout << " | " << points[prevPoint];
}
std::cout << " | " << points[numPoints - 1];
die richtige für i.Vj. Punkte zur Folge haben mir geben:
0 | 1.25 | 2.5 | 0.76 | 4
aber wenn ich versuche, den „same-wrapped-math“ für die nächsten Punkte anzuwenden, erhalte ich eine nicht-proportionale Skalierung, die seltsamen Ergebnisse geben (4
?)
Kann mir jemand helfen?
Uhm, wobei das Verhältnis verwenden Sie? 0,96 jetzt hier http://coliru.stacked-crooked.com/a/f5671e6fbfba8419 – markzzz
Meine Schuld, benutzte ich Altwert für Stretch-Punkt. Bearbeitet – MBo
3,25 ist sowieso falsch! Das Verhältnis wird nicht beibehalten. – markzzz