Skip to content

Commit 635e936

Browse files
committed
fix: scale arrow correctly for short vectors
1 parent a960411 commit 635e936

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

src/components/Vector.vue

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,18 @@ const { scale, offset, invScale } = useGraphContext();
6969
const { colors } = useColors();
7070
const color = computed(() => props.color ?? colors.value.stroke);
7171
72+
const pixelVector = computed(() =>
73+
Vector2.wrap(props.to).sub(props.from).mul(scale.value),
74+
);
7275
const from = computed(() =>
7376
new Vector2(props.from)
7477
.mul(new Vector2(1, -1))
7578
.mul(scale.value)
7679
.add(offset.value),
7780
);
7881
const to = computed(() => {
79-
const toVector = new Vector2(props.to);
80-
81-
const pixelVector = toVector.sub(Vector2.wrap(props.from)).mul(scale.value);
82-
const angle = pixelVector.angle;
83-
const magnitude = pixelVector.length();
82+
const angle = pixelVector.value.angle;
83+
const magnitude = pixelVector.value.length();
8484
const newMagnitude = magnitude - arrowSize.value;
8585
8686
return new Vector2(
@@ -89,12 +89,15 @@ const to = computed(() => {
8989
);
9090
});
9191
const labelPosition = computed(() => {
92-
const toVector = Vector2.wrap(props.to).sub(Vector2.wrap(props.from));
9392
const fromVector = Vector2.wrap(props.from);
93+
const toVector = Vector2.wrap(props.to).sub(fromVector);
9494
return fromVector.add(toVector.normalized().scale(toVector.length() / 2));
9595
});
9696
const dashArray = computed(() =>
9797
props.dashed ? [6 * invScale.value, 4 * invScale.value].join(",") : "0,0",
9898
);
99-
const arrowSize = computed(() => props.arrowSize * invScale.value);
99+
const arrowSize = computed(
100+
() =>
101+
Math.min(props.arrowSize, pixelVector.value.length() / 2) * invScale.value,
102+
);
100103
</script>

0 commit comments

Comments
 (0)