Motor yacht
The vessel profile's outline for a motor yacht, and the vessels it draws.
On this page
Code
import { MOTOR_YACHT, VesselProfile, type VesselOutline } from "@bosunkit/components/vessel-profile";
import type { ReactElement } from "react";
export const description: string =
"The motor yacht outline as traced at 15.95 m, dimensioned in meters read from the points marked on it.";
const outline: VesselOutline = MOTOR_YACHT;
/** Drawing units to the meter: the length overall, from the transom to the bow's tip, is the reference length. */
const perMeter: number = (outline.hooks.bowTip - outline.hooks.transom) / outline.referenceLength;
/** A distance on the drawing, in meters. */
function meters(units: number): string {
return `${(units / perMeter).toFixed(2)} m`;
}
export default function Drawn(): ReactElement {
const { hooks }: VesselOutline = outline;
return (
<VesselProfile
outline={outline}
dimensions={{
lengthOverall: meters(hooks.bowTip - hooks.transom),
waterlineLength: meters(hooks.waterlineForward - hooks.waterlineAft),
draft: meters(hooks.keelFoot - hooks.waterline),
freeboard: meters(hooks.waterline - hooks.deckAtBow),
}}
/>
);
}
The motor yacht outline is traced from Beneteau's side view of the Gran Turismo 50 in its standard version, a planing motor yacht of 15.95 m: a raked bow, a swim platform aft, a hardtop over the deckhouse with its curved glass, three hull-window panels, and under the water the pod drives, which set the draft. The radar arch, the antennas and the rails are left out. Her length overall runs to the platform's edge, as ISO 8666 measures it, and with the transom immersed a shorter waterline comes off the bow. The view draws no waterline, so the trace sets it at Beneteau's maximum draft of 1.18 m above the pods' foot. Flybridge yachts draw from this outline too.
The outline is traced at 15.95 m and listed in VESSEL_OUTLINES as motor-yacht; the kit exports it as MOTOR_YACHT.
The vessel catalog's motor yachts, 15 models, take this outline. Given a vessel's proportions, the vessel
profile stretches it to her length overall, waterline length, freeboard and draft; a
particular not given follows the length overall in the outline's proportion.
Examples
Vessels from this outline
Code
import { MOTOR_YACHT, VesselProfile } from "@bosunkit/components/vessel-profile";
import type { ReactElement } from "react";
export const description: string =
"The Galeon 440 Fly, Ferretti Yachts 580 and Ferretti Yachts 670, each drawn from the motor yacht outline at her " +
"own particulars and to one scale.";
interface Vessel {
/** The vessel, as the catalog names her. */
readonly name: string;
/** Length overall, meters. */
readonly loa: number;
/** Length at the waterline, meters, where the catalog has it. */
readonly lwl?: number;
/** Draft, meters. */
readonly draft: number;
/** Freeboard at the bow, meters, where the catalog has it. */
readonly freeboard?: number;
}
/** Particulars from the vessel catalog. */
const VESSELS: readonly Vessel[] = [
{ name: "Galeon 440 Fly", loa: 13.97, draft: 0.81 },
{ name: "Ferretti Yachts 580", loa: 18.24, draft: 1.5 },
{ name: "Ferretti Yachts 670", loa: 20.24, draft: 1.68 },
];
export default function Vessels(): ReactElement {
return (
<div style={{ display: "grid", gap: "var(--space-md)" }}>
{VESSELS.map(
({ name, loa, lwl, draft, freeboard }: Vessel): ReactElement => (
<figure key={name} style={{ margin: 0 }}>
<VesselProfile
outline={MOTOR_YACHT}
proportions={{ lengthOverall: loa, waterlineLength: lwl, draft, freeboard }}
frameLength={20.24}
dimensions={{
lengthOverall: `${loa.toFixed(2)} m`,
waterlineLength: lwl === undefined ? undefined : `${lwl.toFixed(2)} m`,
draft: `${draft.toFixed(2)} m`,
}}
/>
<figcaption style={{ marginTop: "var(--space-xs)", color: "var(--text-dim)", fontSize: "0.85em" }}>
{name}
</figcaption>
</figure>
),
)}
</div>
);
}
Related
- Vessel profile: the component, its props, and the outline for each hull shape.